因为字节流和字符流有很多重复的地方,所以这回干脆直接把字符流的输入和输出直接一起说了。字符流的核心优点是以字符为基本操作单位,能自动处理不同编码的字符转换,避免直接操作字节可能导致的乱码问题。

字符流内置编码和解码机制,可直接处理 Unicode、UTF-8、GBK 等多种字符编码,无需手动处理字节与字符的映射关系。

一、FileReader

还是先从创建FileReader对象开始,注意提前将文件的编码格式和编译器的编码格式统一。是UTF-8两个就都得是UTF-8,是GBK两个就都得是GBK。(在d盘中创建一个名为Test98.txt的文件,提前在文件中写好内容,我写的内容是“字符型Reader”):

String FilePath = "d:\\Test98.txt";
FileReader fileReader = new FileReader(FilePath);

1.输入单个字符:

int c = 0;
while((c=fileReader.read())!=-1) {
	System.out.print((char)c);
}

创建一个int类型的c来接收read()的返回值,循环输出c并转为char类型。

2.输入char类型字符串当中:

char[] c = new char[4];
int readLen = 0;
while((readLen = fileReader.read())!=-1) {
	System.out.println(new String(c,0,readLen));
}

创建一个char类型数组c来接受文件中的字符,readLen来接收返回的读取长度。可以用String提供的构造方法先后传入数组,初始索引和偏移量来打印,或者用其他方法来输出。

最后不要忘了fileReader.close();来关闭流,释放资源。

二、FileWriter

创建一个FileWriter类对象,如果没有创建输出文件,系统会自动创建。需要注意的是在FileWriter的构造方法中还需要填入一个boolean类型的变量,这个地方决定输出方式为覆盖还是追加,true为追加,false为覆盖且默认为覆盖。

//创建FileWriter对象
String FilePath = "d:\\Test98.txt";
FileWriter fileWriter = new FileWriter(FilePath);

1.输出一个字符:

char ch = '爽';
fileWriter.write(ch);

这里write方法需要传入的是int类型的参数,传入char类型字符会自动进行类型转换。

2.传入char类型数组:

在write传入char类型数组的方法中有两种重载,一种是直接传入数组,另一种在传入数组后还需传入初始索引和偏移量。推荐使用第二种方法,可以在拷贝文件时精确传输内容。

char[] charArray = {'我','爱','你'};
fileWriter.write(charArray,0,charArray.length);

3.传入String类型字符串:

传入String类型数组的方法中同样有两种重载...

String str = "中国China";
fileWriter.write(str,0,str.length());

4.注意!!!

在输出时一定要记得最后使用flush()方法刷新或close()方法关闭流,否则内容不会输出进文件的。

 

更多推荐