用字节流读取的时候 在遇到中文字符时不会显示完整的字符
因为一个中文字符存储时会占用多个字节(GBK:占用2个字节 UTF-8:占用3个字节)
因而 用字节流每次读取的是1/2或1/3个字 转换为char类型显示出来的是乱码
因此 Java提供了字符流类 可以以字符为单位读写数据 专门用于处理文本文件
一、字符输入流 Reader
java.io.Reader
抽象类是表示用于读取字符流的所有类的超类(父类)
可以读取字符信息到内存中
java.io.FileReader
继承了InputStreamReader
继承了Reader
它定义了字符输入流的基本共性功能方法:
public int read() : 从输入流读取一个字符
public int read(char[] cbuf) : 从输入流中读取一些字符 并将它们存储到字符数组 cbuf中
public void close() :关闭此流并释放与此流相关联的任何系统资源
FileReader 文件字符输入流 ★
作用:将硬盘文件中的数据以字符的方式读取到内存中
构造方法:
FileReader(File file) : 创建一个新的 FileReader 给定要读取的File对象
FileReader(String fileName) : 创建一个新的 FileReader 给定要读取的文件的名称
参数(读取的数据源):
String fileName:文件路径
File file:文件
构造方法内部执行流程:
1、创建一个FileReader对象
2、将FileReader对象指向要读取的文件
文件字符输入流 - 使用步骤★:
1、创建一个FileReader对象 构造方法中绑定要读取的数据源
2、使用FileReader对象中的read()方法读取文件
3、释放资源
读字节方法:
1、public int read()
: 从输入流读取一个字符
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("F:\\IdeaProjects\\filetest\\a.txt");
int len=0;
while ((len=fr.read())!=-1)
{
System.out.print((char)len);
}
fr.close();
}
2、public int read(char[] cbuf)
: 从输入流中读取一些字符 并将它们存储到字符数组中
String类的构造方法可将字符数组转换为字符串