Java 讀寫包含中文的文本文件時出現亂碼,核心原因是系統預設編碼與程式指定編碼不一致:
在所有讀寫操作中明確指定編碼格式,推薦統一使用 UTF-8 或根據業務需求指定 GBK。
public static void writeFile(String fileName, String fileContent) {
try {
File file = new File(fileName);
if (!file.exists()) {
file.createNewFile();
}
// 關鍵:OutputStreamWriter 指定編碼
OutputStreamWriter writer = new OutputStreamWriter(
new FileOutputStream(file), "UTF-8");
BufferedWriter bufferedWriter = new BufferedWriter(writer);
bufferedWriter.write(fileContent);
bufferedWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String readFile(String fileName) {
StringBuilder content = new StringBuilder();
try {
File file = new File(fileName);
if (file.isFile() && file.exists()) {
// 關鍵:InputStreamReader 指定編碼
InputStreamReader reader = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
while ((line = bufferedReader.readLine()) != null) {
content.append(line).append(System.lineSeparator());
}
reader.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return content.toString();
}
-Dfile.encoding=UTF-8)。Files.readAllLines(path, StandardCharsets.UTF_8) 簡化代碼。| 編碼 | 適用場景 | 備註 |
|---|---|---|
| UTF-8 | 國際化專案、現代應用 | 推薦預設選擇 |
| GBK/GB2312 | 中國大陸舊系統相容 | 僅支援中文字符 |
| Big5 | 繁體中文舊系統 | 台灣/香港常用 |
中文亂碼本質是編碼不匹配。養成「讀寫必指定編碼」的習慣,配合專案級統一編碼設定,可從根源消除此類問題。