字符流的抽象父类:Reader和Writer
1)、字符输入流:Reader
1 、Reader 是所有的输入字符流的父类,它是一个抽象类。
2 、CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。PipedReader 是从与其它线程共用的管道中读取数据。
3 、 BufferedReader 就是一个缓冲器,缓冲区的出现提高了对数据的读写效率
4 、 FilterReader 是所有自定义具体装饰流的父类,其子类PushbackReader 对Reader 对象进行装饰,会增加一个行号。
5 、InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,Reader 中各个类的用途和使用方法基本和InputStream 中的类使用一致。后面会有Reader 与InputStream 的对应关系。
Reader类的常用方法如下:
close():关闭该流并释放与之关联的所有资源。 |
mark(int readAheadLimit): 标记流中的当前位置。 |
markSupported():判断此流是否支持 mark() 操作。 |
read(): 读取单个字符。 |
read(char[] cbuf): 将字符读入数组。 |
read(char[] cbuf, int off, int len):将字符读入数组的某一部分。 |
read(CharBuffer target):试图将字符读入指定的字符缓冲区。 |
ready(): 判断是否准备读取此流。 |
reset():重置该流。 |
skip(long n) :跳过字符。 |
代码示例如下:字符流读取到缓冲区
//字符读取流缓冲区
FileReader fr=new FileReader("E://abc.txt");
BufferedReader bufr=new BufferedReader(fr);
//bufr.read();//单个字符读取
//System.out.println((char)bufr.read());
String str=null;
while((str=bufr.readLine())!=null){
System.out.println(str);//一行一行的读取
}
bufr.close();
fr.close();
以上代码运行结果是,在控制台上打印出文件abc.txt中的内容
2):字符输出流:Writer类
1、Writer 是所有的输出字符流的父类,它是一个抽象类。
2、CharArrayWriter、StringWriter 是两种基本的介质流,它们分别向Char 数组、String 中写入数据。PipedWriter 是向与其它线程共用的管道中写入数据,
3、BufferedWriter 是一个缓冲器为Writer 提供缓冲功能,提高数据读写效率
4、PrintWriter 和PrintStream 极其类似,功能和使用也非常相似。
5、OutputStreamWriter 是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 其实就是一个实现此功能的具体类。功能和使用和OutputStream
Writer类的常用的方法如下:
append(CharSequence csq)将指定字符序列添加到此 writer。 |
append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer.Appendable。 |
close() 关闭此流,但要先刷新它。 |
flush()刷新该流的缓冲。 |
write(char[] cbuf) 写入字符数组。 |
write(char[] cbuf, int off, int len)写入字符数组的某一部分。 |
write(int c) 写入单个字符。 |
示例代码如下:写数据到缓冲区
FileWriter fw=new FileWriter("E://abc.txt");
BufferedWriter bufw=new BufferedWriter(fw); for(int x=1;x<5;x++){
bufw.write("abcdfg"+x);
bufw.newLine();//换行
bufw.flush();
}
bufw.close();
fw.close();
3)、通过缓冲区复制一个文件
将Demo.java文件内的内容读取出来,写到readercopy.txt文件中
代码如下:
BufferedWriter bufw=null;
BufferedReader bufr=null;
try {
bufw=new BufferedWriter(new FileWriter("E://readercopy.txt"));
bufr=new BufferedReader(new FileReader("E://Demo.java"));
String line=null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();//换行
bufw.flush();
}
} catch (IOException e) {
System.out.println("读写失败!");
}finally{
try {
if(bufw!=null)
bufw.close();
} catch (IOException e2) {
throw new RuntimeException("写入失败!");
}
try {
if(bufr!=null)
bufr.close();
} catch (IOException e2) {
throw new RuntimeException("读取失败!");
}
}