若想要对 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");
|