public static void readBuff(){
File file = new File("D:\\io\\A.txt");
try{
FileInputStream fileReader = new FileInputStream(file);
BufferedReader read = new BufferedReader(new InputStreamReader(fileReader,"GBK"));
while(read.readLine() != null ){
System.out.println(read.readLine());
}
read.close();
}catch (Exception e){
e.printStackTrace();
}
}
如上所示运行,文本正常显示。
1,File实例化文件。
2,FileInputStream实例化File实例。
3,利用InputStreamReader类编码,且把字节流转换为字符流(new InputStreamReader(fileReader,"gbk)).
4,逐行读取。
5,关闭流。
注意:FileInputStream属于字节流。
若如下所示运行代码,则会出现乱码。
public static void readBuff(){
File file = new File("D:\\io\\A.txt");
try{
// FileInputStream fileReader = new FileInputStream(file);
FileReader fileReader = new FileReader(file);
BufferedReader read = new BufferedReader(fileReader);
while(read.readLine() != null ){
System.out.println(read.readLine());
}
read.close();
}catch (Exception e){
e.printStackTrace();
}
}
把文件直接转换为字符流的方式容易产生乱码,问题出在于FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,只能按系统默认的字符集来解码,然后在UTF-8 -> GBK -> UTF-8的过程中编码出现损失,不能还原最初的字符。