BufferedReader和BufferedWriter读写中文到.txt文件中出现乱码的解决方法

1.使用如下代码:

//缓冲字符输入流
BufferedReader br = new BufferedReader( new FileReader("outputFile\\fileSortIn.txt"));
//缓冲字符输出流
BufferedWriter bw = new BufferedWriter( new FileWriter("outputFile\\fileSortOut.txt"));

2.出现的问题:

读取的是中文字符,再次写入的时候出现乱码。
BufferedReader和BufferedWriter读写中文到.txt文件中出现乱码的解决方法_第1张图片

3.出现问题的原因:

编译器IntelliJ IDEA 默认使用的字符编码方式为“UTF-8”,而.txt文件的字符编码方式为“GBK”。若在使用IO流不指定编码方式,则读取和写入的编码方式不一致,故出现乱码。

4.解决办法

在程序中读取数据时,指定其编码方式与写入的编码方式相同,即指定BufferedReader的编码方式为“GBK”。又BufferedReader的构造函数中不能指定编码方式,故需要包装其他可指定编码方式的类。InputStreamReader类可指定字符编码方式,构造函数如下:

InputStreamReader(InputStream in, String charsetName) 

故将上述代码的读取和写入流设置为如下:

//缓冲字符输入流指定字符编码方式为“GBK”,跟.txt文件的字符编码相同
InputStreamReader isr = new InputStreamReader(new FileInputStream("outputFile\\fileSortIn.txt"),"GBK");
BufferedReader br = new BufferedReader(isr);
//缓冲字符输出流,默认的字符编码方式与.txt文件一样,为“GBK”
BufferedWriter bw = new BufferedWriter( new FileWriter("outputFile\\fileSortOut.txt"));

5.GBK 与 UTF-8 的区别

一个中文字符,
GBK:占用两个字节;
UTF-8:占用三个字节。(1个字节 = 8个二进制位)

计算机存储的所有数据、文件等都是以二进制存储的。故读写数据时要注意其编码方式。

你可能感兴趣的:(JAVA)