使用BufferedReader和BufferedWriter读写文件时,在不指定特定的编码格式时,可能会出现乱码的问题。为什么是可能呢,因为有时候也会出现不乱码的情况,这是因为JVM的默认编码格式跟我们读写的文件编码格式正好是一致的,所以此时不指定特定的编码格式也不会出现问题。但是在遇到JVM默认编码格式和文件编码格式不一样时,就会出现中文乱码的问题,因此此时我们需要根据文件的属性去修改IO流的编码格式,我们可以使用System.getProperty(“file.encoding”);查看系统的编码格式。为了代码的容错性,在任何时候我们都给流指定一种编码格式,这样会避免因运行的环境不同而导致的乱码。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class IOTest {
public static void main(String[] args) {
String result = null;
File fileIn = new File("E:/test/test1.txt");
File fileOut = new File("E:/test/test2.txt");
InputStreamReader inStream = null;
OutputStreamWriter outStream = null;
try {
inStream = new InputStreamReader(new FileInputStream(fileIn),
"UTF-8");
outStream = new OutputStreamWriter(new FileOutputStream(fileOut),
"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(inStream);
BufferedWriter writer = new BufferedWriter(outStream);
try {
while ((result = reader.readLine()) != null) {
writer.write(result);
writer.newLine();
writer.flush();
}
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在上面的代码中我们设置流的编码格式为UTF-8,这是因为我的文件编码格式是UTF-8,如果我们的文件编码格式不是UTF-8,我们需要在这里设置为其对应的编码格式,比如说GBK等。
本文介绍如何通过设置正确的编码格式来避免在使用Java进行文件读写时出现的中文乱码问题,并提供了一个示例代码,展示了如何指定UTF-8编码。

892

被折叠的 条评论
为什么被折叠?



