字符流
字节流提供处理任何类型输入/输出操作的足够功能,但不能直接操作Unicode字符,因而需要字符流。
字符流层次结构的顶层是Reader和Writer抽象类。
实际上,字符流的底层就是字节流。
一、Reader
① Reader是定义Java的流式字符输入模式的抽象类。
② Reader抽象类中的方法:
a) public int read(CharBuffer target) throws IOException
b) public int read()
c) public int read(char[] cbuf)
d) public abstract int read(char[] cbuf,int off,int len)
e) public abstract void close()
二、Writer
① Writer是定义流式字符输出的抽象类。
② 该类的方法都返回void值并在出错条件下抛IOException异常。
③ Writer抽象类中方法:
a) public void write(int c)
b) public void write(char[] cbuf)
c) public abstract void write(char[] cbuf,int off,int len)
d) public void write(String str) throws IOException
e) public void write(String str,int off,int len)
f) public Write append(char c)
g) public abstract void flush()
h) public abstract void close()
三、FileReader
① FileReader类表示可以读取文件内容的Reader类。
② 构造方法:
a) FileReader(String filePath)
b) FileReader(File fileObj)
四、 FileWriter
① FileWriter表示可以写文件的Writer类
② 构造方法:
a) FileWriter(String filePath)
b) FileWriter(String filePath,boolean append)
c) FileWriter(File fileObj)
复制文本:
1 FileReader fr=new FileReader("d:/aa.txt"); 2 FileWriter fw=new FileWriter("d:/c.txt"); 3 char[] buff=new char[100]; 4 int len=0;//实际读到的字符个数
5 while((len=fr.read(buff))!=-1){ 6 fw.write(buff, 0, len); 7 //fw.flush();//当最后不释放资源时,且缓冲区(8K)未写满时强制刷新
8 } 9 fr.close(); 10 fw.close();//若此处不释放资源,缓冲区未写满,且无刷新语句时,文本将不会被复制进新的文本
五、BufferedReader
① BufferedReader通过缓冲输入提高性能
② 两个构造方法:
a) BufferedReader(Reader inputStream)
b) BufferedReader(Reader inputStream,int bufSize)
六、BufferedWriter
① BufferedWriter通过缓冲输出提高性能
② 两个构造方法:
a) BufferedWriter(Writer outputStream)
b) BufferedWriter(Writer outputStream,int bufSize)
同样做一个复制文本的功能(复制一个多行文本):
1 FileReader fr=new FileReader("d:/JavaStudy/First.java"); 2 BufferedReader br=new BufferedReader(fr); 3 FileWriter fw=new FileWriter("d:/abc.java"); 4 BufferedWriter bw=new BufferedWriter(fw); 5 String line=null; 6 while((line=br.readLine())!=null){ 7 System.out.println(line); 8 bw.write(line); 9 bw.newLine();//换行 10 //bw.flush();
11 } 12 br.close(); 13 bw.close();