若想要對 InputStream、
OutputStream
進行字元處理,您可以使用InputStreamReader、OutputStreamWriter為它們加上字元處理的功能,舉個例子來說,若想要顯示純文字檔案的內容,您不用費心的自行判斷
字元編碼(例如之前範例中要費心的自行判斷是ASCII英文字母或Big5中文字),只要將InputStream、OutputStream的實例作為建構InputStreamReader、OutputStreamWriter時的引數,之後就可以操作InputStreamReader、OutputStreamWriter來進行文字檔案的讀取,讓它們為您作字元判斷與轉換的動作。
下面這個例子可以用來開啟文字檔案,並將其備份為"原檔名.bak":
- StreamReaderWriterDemo.java
package onlyfun.caterpillar; import java.io.*; public class StreamReaderWriterDemo { public static void main(String[] args) { try { FileInputStream fileInputStream = new FileInputStream(args[0]); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); FileOutputStream fileOutputStream = new FileOutputStream(args[0] + ".bak"); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); int ch; // 以字元方式顯示檔案內容 while((ch = inputStreamReader.read()) != -1) { System.out.print((char)ch); outputStreamWriter.write(ch); } System.out.println(); inputStreamReader.close(); outputStreamWriter.close(); } catch(ArrayIndexOutOfBoundsException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
在這邊是使用FileInputStream、FileOutputStream為例,但InputStreamReader、 OutputStreamWriter可以分別以InputStream、OutputStream作為建構物件時的參數。
InputStreamReader、OutputStreamWriter在存取時是以系統的預設字元編碼來進行字元轉換,您也可以自行指定字元編碼,例如
new InputStreamReader(fileInputStream, "GB2312");
|