InputStreamReader可以把字節(jié)流,以指定的編碼轉(zhuǎn)換為字符流。
OutputStreamWriter可以把字符流以指定的編碼轉(zhuǎn)換為字節(jié)流。
這兩個類采用了適配器設(shè)計模式, 電源適配器可以把220的交流電轉(zhuǎn)換為20V的直流電, InputStreamReader把字節(jié)流轉(zhuǎn)換為字符流, OutputStreamWriter把字符流轉(zhuǎn)換為字節(jié)流。
package com.wkcto.chapter06.readerwriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
/**
* InputStreamReader/OutputStreamWriter , 轉(zhuǎn)換流類
* 當(dāng)文本文件的編碼格式與當(dāng)前環(huán)境的編碼格式不兼容時, 使用轉(zhuǎn)換流類讀寫文件
* @author 蛙課網(wǎng)
*
*/
public class Test04 {
public static void main(String[] args) throws IOException {
//讀取文本文件, 文本文件的編碼與當(dāng)前環(huán)境編碼不兼容
// readData();
//保存文件, 以指定的編碼把數(shù)據(jù)保存到文件中
writeData();
}
private static void writeData() throws IOException {
OutputStream out = new FileOutputStream("d:/def.txt"); //以覆蓋的方式打開文件
OutputStreamWriter osw = new OutputStreamWriter(out, "GBK");
osw.write("程序開發(fā)環(huán)境使用UTF-8編碼, 而現(xiàn)在是以GBK的格式把數(shù)據(jù)保存到文件中");
osw.close();
}
//讀取文本文件, 文本文件的編碼與當(dāng)前環(huán)境編碼不兼容
private static void readData() throws IOException {
//在當(dāng)前程序與d:/test01.java文件之間建立字節(jié)流通道 , d:/test01.java文件使用GBK編碼, 當(dāng)前環(huán)境是UTF-8編碼
InputStream in = new FileInputStream("d:/test01.java");
//使用轉(zhuǎn)換流, 把字節(jié)流in中的字節(jié),按照指定的編碼GBK轉(zhuǎn)換為字符
InputStreamReader isr = new InputStreamReader(in, "GBK");
//可以讀取字符流isr中的字符
int cc = isr.read();
while( cc != -1){
System.out.print( (char)cc);
cc = isr.read();
}
isr.close();
}
}