目录
3.使用 FileReader 和 FileWriter实现了复制文件内容的目的
1.字符流概要
读取字符流类继承自抽象类 Reader
,写入字符流继承自抽象类 Write
。并且 Reader
的子类必须实现的方法只有 read(char[], int, int)
和 close()
。但是,多数子类还重写了 Writer
或 Reader
类定义的一些其他方法,以提供更高的效率或完成其他功能。
Reader
和 Writer
要解决的一个主要问题是国际化。原先的 I/O 类库只支持 8 位的字节流,因此不能很好地处理 16 位的 Unicode 字符。Unicode 是国际化的字符集,这样在增加了 Reader
和 Writer
之后,就可以自动在本地字符集和 Unicode 国际化字符集之间进行转换,程序员在应对国际化时不需要做过多额外的处理。
2.部分输入字符流类
FileReader
:与FileInputStream
对应,从文件系统中读取字符序列。CharArrayReader
:与ByteArrayInputStream
对应,从字符数组中读取数据。PipedReader
:与PipedInputStream
对应,从线程管道中读取字符序列。StringReader
:从字符串中读取字符序列。
3.使用 FileReader
和 FileWriter
实现了复制文件内容的目的
import java.io.*;
public class TestCharStream{
public static void main(String[] args) throws IOException {
FileReader in = null;
FileWriter out = null;
try{
//其中args[0]代表程序执行时输入的第一个参数
in = new FileReader(args[0]);
out = new FileWriter(args[1]);
//通过逐个读取、存入字符,实现文件复制
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}catch(IOException e){
System.out.println(e.getMessage());
}finally{
if(in != null){
in.close();
}
if(out != null){
out.close();
}
}
}
}
在程序里,main()
方法中有 args
这个字符串数组参数,通过这个参数,可以获取用户执行程序时输入的多个参数,其中 args[0]
代表程序执行时用户输入的第一个参数,args[1]
代表程序执行时用户输入的第二个参数,依次类推
4.Writer
输出字符流的可用方法
注意,这些方法操作的数据是 char
相关类型,不是 byte
类型
Writer append(char c)
:将指定字符 c 追加到此 Writer,此处是追加,不是覆盖。Writer append(CharSequence csq)
:将指定字符序列 csq 添加到此 Writer。Writer append(CharSequence csq, int start, int end)
:将指定字符序列 csq 的子序列,追加到此 Writer。void write(char[] cbuf)
:写入字符数组 cbuf。void write (char[] cbuf, int off, int len)
:写入字符数组 cbuf 的某一部分。void write(int c)
:写入单个字符 c。void write(String str)
:写入字符串 str。void write(String str, int off, int len)
:写入字符串 str 的某一部分。void close()
:关闭当前流。