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