前面学习了字节流操作,现在开始学习字符流操作。字符流操作也很简单,还是基于前面介绍的核心6行代码。什么是字符流呢,我们知道任何数据存储在计算机上都是以二进制字节存储。字符流是可以直接读写字符的IO流。字符流读写字符,先是读取到字节,把字节转换成字符,如果要写出字符流,也是先把字符转换字节再写出。
1. FileReader类,读取一个字符
在API文档,搜索找到FileReader类,可以看到它直接父类是InputStreamReader,FileReader类本身没有几个方法,下面我们就来写一个简单的练习,读取一个txt文件里面的内容,这次我们内容是中文。提前手动创建一个abc.txt,内容是“你好,中国。”,先来读取一个字符代码。
package io;
import java.io.FileReader;
import java.io.IOException;
public class Demo1_FileReader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("abc.txt");
int x = fr.read();
//每次读取一个字符
System.out.println(x);
char c = (char)x;
System.out.println(c);
fr.close();
}
}
运行出来是:
20320
你
这里需要解释一下,你自己环境看到的运行结果可能不是20320, 这个FileReader类是根据你本地环境的字符集编码表来进行转换的。我的Eclipse当前Project下属性的编码是用UTF-8,如果你是GBK,这个数字会和我不一样、
读取全部字符
字符流读取,循环条件也是read()方法返回不等于负一。
package io;
import java.io.FileReader;
import java.io.IOException;
public class Demo1_FileReader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("abc.txt");
int x;
while ( (x = fr.read()) != -1) {
System.out.print((char)x);
}
fr.close();
}
}
运行结果,显示 “你好,中国。”