FileReader属于字符流,是读取字符文件的便捷类。其继承自InputStreamReader,后者是将字节流转换为字符流的的桥梁,即将字节信息转换为字符信息。
实际上, FileReader在类内部实现过程中也是利用了InputStreamReader完成字节流到字符流的转化,只不过转化时采用的字符集为系统默认的字符集。
如果文件保存时的编码设定为UTF-8, 那么在中文操作系统使用 FileReader时就会发生乱码,因为中文操作系统平台的默认字符集为GBK。
解决该问题的办法是,放弃使用FileReader,改用InputStreamReader,在获取InputStreamReader对象时,显示指定合适的字符集。
使用指定字符集读取文件的示例代码如下:
public static void testInputStreamReader(){
FileInputStream fis = new FileInputStream("C:\\b.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String s = null;
while((s = br.readLine()) != null){
System.out.println(s);
}
br.close();
isr.close();
fis.close();
}