在简体中文Windows上, 默认启动的Java程序如果没有加上设置file encoding,那么默认生成的文件(写文件时没有指定编码的那种)是GBK编码的,这样的文件传输到其它非GBK编码的机器上会无法正常显示。 需要将其转换为utf-8格式的,这样就能在所有机器上以utf-8打开正常显示。
下面这段代码是如何将文件从当前默认的encoding读取后以utf-8写入
读取当前的file encodning (注意xxx.java文件是utf-8编码)
String fileEncoding = System.getProperty("file.encoding");
System.out.println("FileEncoding:" + fileEncoding);
try {
String filePath= "d:\\dir1\\file1.txt";
File readfile = new File(filePath);
if (readfile.isFile() && readfile.exists()) {
//按照当前默认的file encoding独舞文件
InputStreamReader read = new InputStreamReader(new FileInputStream(readfile));
System.out.println("File Encoding:["+ read.getEncoding());
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
StringBuilder sb = new StringBuilder();
while ((lineTxt = bufferedReader.readLine()) != null) {
sb.append(lineTxt).append("\n");
}
read.close();
System.out.println("New:" + sb.toString());
File fileWriter = new File(filePath + "a");
if (fileWriter != null && fileWriter.exists()) {
System.out.println("File["+fileWriter.getAbsolutePath() + "] already exists, Will not create it");
}
else {
System.out.println("File["+fileWriter.getAbsolutePath() + "] does not exists, create it");
//以utf-8写入文件
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileWriter), "UTF-8"));
try {
out.write(sb.toString());
} finally {
out.close();
}
}
}
else {
System.out.println("File:["+ readfile.getAbsolutePath() +"] does non exist");
}
} catch (Exception e) {
System.out.println("error");
e.printStackTrace();
}
可以在启动java程序时改变file enconding
set JAVA_OPTS=-Xmx512m -Dfile.encoding=UTF-8
或者java -jar xxxx -Dfile.encoding=UTF-8