欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 文件IO流

程序员文章站 2024-01-21 18:40:16
...

相对路径:

windows系统中一般用反斜杠 \ 来表示路径。两个反斜杠 \\是因为需要转义。

相对路径是相对于项目根目录的路径,例如项目名称为programme,里面有src文件,src文件里有java1包,那么相对路径和绝对路径的对应关系如下:

绝对路径 d:\\project\\programme\\a.txt 
相对路径 a.txt

绝对路径 d:\\project\\programme\\src\\java1\\a.txt 
相对路径 src\\a.txt

FileOutputStream

字节流输出,常见构造器有三种:

FileOutputStream fos = new FileOutputStream(new File("a.txt"));
FileOutputStream fos = new FileOutputStream("a.txt");
//直接在文件已有内容之后写入,不会覆盖原文件。
FileOutputStream fos = new FileOutputStream("a.txt", true); 

如果a.txt文件不存在,那么会自动新建一个a.txt文件。

FileOutputStream常见方法:

close()
write(int b)
write(byte[] b) 

举个例子:

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException {
		FileOutputStream fos = new FileOutputStream("a.txt");
		fos.write(98);
		fos.close();
	}
}

在a.txt中输出了一个b,为什么是一个b呢,因为字节流会把十进制的数字转换成二进制(一个字节),通过ASCII转换成字符存入文件中。如果要输出多个字节,可以用byte数组作为参数。

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException {
		FileOutputStream fos = new FileOutputStream("a.txt");
		String s = "abc";
		byte[] b = s.getBytes(); //byte[] b = {97, 98, 99};
		fos.write(b);
		fos.close();
	}
}

输出abc。需要注意的是,如果写入的是正数0~127,那么会根据ASCII转换为相应的字符,如果写入的是负数,会和下一个字节转换为一个汉字(GBK码)。

String类的getBytes()方法可以把一个字符串转换成字节数组。

实现换行,windows系统为\r\n,linux系统为/n,mac系统为/r。

fos.write("\r\n".getBytes());

FileInputStream

字节流输入,常见构造器:

FileOutputStream fos = new FileOutputStream(new File("a.txt"));
FileOutputStream fos = new FileOutputStream("a.txt");

FileInputStream常见方法:

close()
flush()
read() //返回下一个数据字节;如果已到达文件末尾,则返回-1。
read(byte[] b) //读到字节存储在字节数组中,起缓冲作用
			   //返回读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。

举个例子:(a.txt的内容为abc)

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("a.txt");
		int i = 0;
		while((i = fis.read()) != -1) {
			System.out.print((char)i);
		}
	}
	fis.close();
}

输出abc。如果想要读取多个字节,可以使用byte数组储存。

import java.io.*;
import java.util.Arrays;
public class {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("a.txt");
		byte[] b = new byte[3];
		fis.read(b);
		System.out.println(Arrays.toString(b));
	}
	fis.close();
}

输出[49, 50, 51]。

FileReader和FileWriter

字符流输入输出。用法和FileInputStream,FileOutputStream差不多。

import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("a.txt");
		char[] c = new char[3];
		fr.read(c);
		System.out.println(new String(c)); 
	}
	fr.close();
}

String的构造器可以把char数组和byte数组转换成字符串(如上例所示)。

FileWriter的write()方法,会把字符写入到缓冲区,字符转换为字节存储到文件中。需要调用flush()或者close(),才能把缓冲区的数据存入文件。

相关标签: Java