今天復習java基礎知識時候遇到個問題。我用流存的時候是UTF-8,但是使用FileReader讀的時候,竟然不亂碼。。為什么呢?難道FileReader不是GBK格式嗎? public static void main(String[] args) throws Exception {
//writFile();
readFile();
}
public static void readFile()throws Exception{
FileReader fileReader = new FileReader("F:/a.txt");
int len=0;
while ((len=fileReader.read())!=-1) {
System.out.println((char)len);
}
fileReader.close();
}
public static void writFile()throws Exception{
FileOutputStream fileOutputStream = new FileOutputStream("F:/a.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"utf-8");
outputStreamWriter.write("您好ass");
outputStreamWriter.close();
}
1 回答

嚕嚕噠
TA貢獻1784條經驗 獲得超7個贊
你這樣new出來的FileReader,底層是使用默認字符編碼的,默認字符編碼是Charset.defaultCharset(),這個是和運行環境有關的,也可以通過java命令行參數指定。
總之,這個默認字符編碼不是一個開發人員完全可以掌控的參數,也許你本機是好的、放到服務器上亂碼,或者反之。
所以,這里保險點的辦法是先獲得字節流(FileInputStream),然后把字節流轉成字符流,轉的時候是可以自己制定字符編碼的,這樣不管是什么環境,程序的運行結果都是一致的。
另外,close()方法一定要寫在finally{}里,雖然不是正式的代碼,但要養成這個習慣。
添加回答
舉報
0/150
提交
取消