FileReader读文件乱码

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();
    }

你可能感兴趣的:(JavaSE-File)