當你讀取一個文本文件時,如果是在電腦記事本上面寫的,然后保存。使用InputStreamReader讀取出來,並且是按照他的編碼格式讀取出來,發現還是存在亂碼,比如文本內容是“你好”,讀出來顯示是“?你好”。
使用資源管理器在項目的目錄下創建一個b.txt文件,在里面輸入“你好”,然后保存
1 InputStreamReader isr = new InputStreamReader(new FileInputStream(“src/txt/b.txt”)); 2 char[] ch = new char[1024]; 3 int index = isr.read(ch); 4 System.out.println(new String(ch,0,index)); 5 isr.close();
運行結果:?你好
這是因為你在文本編輯器寫入文本時,系統自動在前面加了一個開始標示符,在內容結束后面加了一個結束標示符,如果 System.out.println(new String(ch,1,index-1));來打印輸出的話,就把開始結束標示符去掉了,可以達到原內容輸出的效果,但不建議這么做,因為並不是所有的文件都是這樣。
1 InputStreamReader isr = new InputStreamReader(new FileInputStream("src/txt/b.txt")); 2 char[] ch = new char[1024]; 3 int index = isr.read(ch); 4 System.out.println(new String(ch,1,index-1)); 5 isr.close();
運行結果:你好
最好還是自己通過OutputStreamWriter自己寫一個文本文件,規定他的編碼格式,然后讀取出來。就不會出現上面描述的錯誤。詳細代碼如下:
1 public static void main(String[] args) throws Exception { 2 //標准的字節流,按照一定的編碼格式,轉換為字符流。如果讀取字符流的時候,使用的是系統默認的編碼格式, 3 //則直接使用fileReader和fileWriter。如果需要指定編碼格式,則使用inputStreamReader和OutputStreamWrite 4 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("src/txt/b.txt"), "UTF-8"); 5 //可以再包裝一層,也可以不包裝這一層,直接使用osw調用方法往文本里面寫入內容 6 BufferedWriter bw = new BufferedWriter(osw); 7 bw.write("你好"); 8 bw.flush();//刷新緩沖內容到文件 9 bw.close(); 10 osw.close(); 11 //創建一個inputstreamreader 12 InputStreamReader isr = new InputStreamReader(new FileInputStream("src/txt/b.txt"),"UTF-8"); 13 char[] ch = new char[1024]; 14 int index = isr.read(ch); 15 System.out.println(new String(ch,0,index)); 16 isr.close(); 17 }
最后運行結果:你好