问题来源:
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
运行环境:
本机环境是运行于VsCode中,插件有如下:
如果在VsCode中使用新版JDK我们需要执行下述操作步骤:
1,文件-首选项-设置
2,输入javahome
3,找到下图所示位置
4,进入指定文件后键入我49行中的内容,目录替换为你的新JDK文件夹位置
5,保存并重启,检查是否正常使用
注:java.home已淘汰,现已替换为:java.jdt.ls.java.home
文章出处登录后可见!
已经登录?立即刷新