问题来源:
Java中FileWriter写入中文乱码通常是由于“系统向目标文件写入时所使用的编码与目标文件自身的编码不同”
解决办法:
首先,确保使用JDK11及以上
其次,在实例化FileWriter的时候,第二个参数使用指定的文件编码,如UTF-8
最后,成功运行。
示例代码:
package Java.WRTest;
import java.io.FileWriter;
//注意1
import java.nio.charset.Charset;
public class FileWriterTest {
public static void main(String[] args) {
FileWriter writer = null;
try{
String file = "E:/CodeAll/Java/IOStreamTest/test.txt";
//注意2
writer = new FileWriter(file, Charset.forName("UTF-8"));
writer.write("你好 世界!!");
}catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(writer != null) {
writer.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
代码解释:
在“注意2”中,我们通过FileWriter(String fileName, Charset charset)的构造方法指定了字符编码,以对应我们目标文件的编码(通常使用UTF-8)。
在“注意1”中,我们导入了Charset所需的类,使之正常使用。
拓展:
我们还可以通过如下代码以替换Charset.forName("UTF-8")使用,
//需要的包
import java.nio.charset.StandardCharsets;
//可替换
StandardCharsets.UTF_8
在JDK11及以上中,可以通过构造方法指定编码格式了。
JDK20中FileWriter构造方法如图1所示, JDK11中FileWriter构造方法如图2所示, JDK8中FileWriter构造方法如图3所示。
图1
图2
图3