FileReader可以讀取IDE默認(rèn)編碼格式(UTF-8)的文件,F(xiàn)ileReader讀取系統(tǒng)默認(rèn)編碼(中文GBK)會(huì)產(chǎn)生亂碼。
轉(zhuǎn)換流可以指定編碼表
OutputStreamWriter
是字符流通向字節(jié)流的橋梁:可使用指定的charset將要寫入流中的字符編碼成字節(jié)。
使用步驟:
(1)創(chuàng)建OutputStreamWriter對(duì)象,構(gòu)造方法中傳遞字節(jié)輸出流和指定的編碼表名稱;
(2)使用OutputStreamWriter對(duì)象中的方法write,把字符轉(zhuǎn)換為字節(jié)存儲(chǔ)緩沖區(qū)中(編碼);
(3)使用OutputStreamWriter對(duì)象中的方法flush,把內(nèi)存緩沖區(qū)中的字節(jié)刷新到文件中(使用字節(jié)流寫字節(jié)的過程);
(4)釋放資源.
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("http://Users/yangna//Desktop//進(jìn)度//c.txt"),"GBK");
osw.write("你好");
osw.flush();
osw.close();
InputStreamReader
使用步驟:
(1)創(chuàng)建InputStreamReader對(duì)象,構(gòu)造方法中傳遞字節(jié)輸入流和指定的編碼表名稱
(2)使用InputStreamReader對(duì)象中的方法read讀取文件
(3)釋放資源
注意事項(xiàng):構(gòu)造方法中指定的編碼表名稱要和文件的編碼相同,否則會(huì)發(fā)生亂碼。
InputStreamReader isr = new InputStreamReader(new FileInputStream("http://Users/yangna//Desktop//進(jìn)度//b.txt"));
int len = 0;
while((len = isr.read())!=-1){
System.out.println((char)len);
}
練習(xí):轉(zhuǎn)換文件編碼
將GBK編碼的文本文件,轉(zhuǎn)換為UTF-8編碼的文本文件。
分析:
(1)創(chuàng)建InputStreamReader對(duì)象,構(gòu)造方法中傳遞字節(jié)輸入流和指定的編碼表名稱GBK;
(2)創(chuàng)建OutputStreamWriter對(duì)象,構(gòu)造方法中傳遞字節(jié)輸出流和指定的編碼表名稱UTF-8;
(3)使用InputStreamReader對(duì)象中的方法read讀取文件;
(4)使用OutputStreamWriter對(duì)象中的方法write,把讀取的數(shù)據(jù)寫入到文件中;
(5)釋放資源。
InputStreamReader isr = new InputStreamReader(new FileInputStream("http://Users/yangna//Desktop//進(jìn)度//b.txt"),"GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("http://Users/yangna//Desktop//進(jìn)度//c.txt"),"UTF-8");
int len =0;
while((len = isr.read()) != -1){
osw.write(len);
}
osw.close();
isr.close();