大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: InputStreamReader、OutputStreamWriter

若想要对 InputStream、 OutputStream 进行字节处理,您可以使用InputStreamReaderOutputStreamWriter为它们加上字节处理的功能,举个例子来说,若想要显示纯文字文件的内容,您不用费心的自行判断 字节编码(例如之前范例中要费心的自行判断是ASCII英文字母或Big5中文字),只要将InputStreamOutputStream的实例作为建构InputStreamReaderOutputStreamWriter时的参数,之后就可以操作InputStreamReaderOutputStreamWriter来进行文字文件的读取,让它们为您作字节判断与转换的动作。

下面这个例子可以用来开启文字文件,并将其备份为"原档名.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");