我们在读取拥有中文的文件时,使用的是字节流在读取,那么我们读取到的都是一个一个字节。只要把这些字节去查阅对应的编码表,就能够得到与之对应的字符。API中是否给我们已经提供了读取相应字符的功能流对象,Reader,读取字符流的抽象超类。也就是我们所说的字符输入流。
我们先来看一下字符输入流的定义:java.io.Reader,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类。
java.io.FileReader extends InputStreamReader extends Reader
FileReader:文件字符输入流
作用:把硬盘文件中的数据以字符的方式读取到内存中
FileReader(String fileName)
FileReader(File file)
参数:读取文件的数据源
String fileName:文件的路径
File file:一个文件
1.创建一个FileReader对象
2.会把FileReader对象指向要读取的文件
read():读取单个字符并返回,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1,循环读取,代码使用演示:
read(char[]):将数据读取到数组中,并返回读取的个数。每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回-1
查阅FileInputStream的API,发现FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
打开FileReader的API介绍。用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的
使用FileReader读取包含中文的文件:
public class CharStreamDemo {
public static void main(String[] args) throws IOException {
//给文件中写中文
writeCNText();
//读取文件中的中文
readCNText();
}
//读取中文
public static void readCNText() throws IOException {
FileReader fr = new FileReader("D:\\test\\cn.txt");
int ch = 0;
while((ch = fr.read())!=-1){
//输出的字符对应的编码值
System.out.println(ch);
//输出字符本身
System.out.println((char)ch);
}
}
//写中文
public static void writeCNText() throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt");
fos.write("a欢迎你".getBytes());
fos.close();
}
}
看到这里是不是觉得已经学会了字符输入流Reader,但对于字符流的学习才刚刚开始,字符流中还有很多其他类型,比如FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter 等,都需要我们慢慢去掌握,还没有学习途径的小伙伴可以通过动力节点在线的视频教程免费学习。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54