这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战
问题
- 在用Java中读写含中文的文件时,读出或写入的内容经常会出现乱码的问题
原因
- 系统的编码和程序的编码采用了不同的编码格式
- windows自身采用的编码格式是gbk. 而gbk和gb2312基本上是一样的编码方式
- IDEA中Encode默认是utf-8的编码
- 当在windows中创建并写入的文件编码为gbk. 用程序直接去读会以utf-8方式读取,这样就会乱码
- 为了避免可能的中文乱码问题,最好在文件写入和读出的时候显式指定编码格式
解决
- 在Java中,使用java.io.FileReader或者java.io.FileWriter来读写文件
- 虽然可以通过java.io.BufferedReader和java.io.BufferedWriter来提高效率
- 但是在FileReader和FileWriter中只能获取编码方式,不能设置编码方式
- 这样导致在FileReader和FileWriter中的编码设置只能服从底层的编码设置,这样就会在读写多种语言编码的文件时出现乱码
- 采用java.io.FileInputStream或者java.io.InputStreamReader和java.io.FileOutputStream或者java.io.OutputStreamWriter来解决这个问题
- InputStreamReader和OutputStreamWriter中,可以通过指定编码方式来完成gbk文件的读写
1 | java复制代码public class ReadAndWrite { |
总结
- BufferedWriter最后一定要关闭,否则内容不会被写入到文件中
- 使用readLine() 方法时,换行写出要添加
本文转载自: 掘金