java核心技术之IO流(五)BufferedReader和BufferedWriter
最后更新于:2022-04-01 09:58:48
### 简单的说明
一般小的字符(char)文件的读取和写入数据,我们使用FileReader和FileWriter类就可以实现了,但是对于大的字符(char)文件的读取和写入数据,性能就会有很大的问题,我们一般选择BufferedReader和BufferedWriter来处理,也就是说BufferedReader和BufferedWriter主要的目的是提高字符(char)文件的内容读取和写入的性能。
### BufferedReader和BufferedWriter
### BufferedReader类
构造方法:
BufferedReader(Reader in)
创建一个有8192的字符(char)的缓存区
BufferedReader(Reader in, int size)
创建一个有size大小字符(char)的缓存区
关键方法:
read()
read(char[] buffer, int offset, int length)
readLine()——读取一行数据
常用使用方式:
~~~
BufferedReader buf = new BufferedReader(new FileReader("file.java"));
~~~
### BufferedWriter类
构造方法:
BufferedWriter(Writer out)
创建一个有8192的字符(char)的缓存区
BufferedWriter(Writer out, int size)
创建一个有size大小字符(char)的缓存区
关键方法:
write(int oneChar)
write(String str, int offset, int count)
write(char[] buffer, int offset, int count)
newLine()——插入新的一行
flush()
主要是用来把缓存区的数据刷新到文件中去
常用使用方式:
~~~
BufferedWriter buf = new BufferedWriter(new FileWriter("file.java"));
~~~
### 一个测试的Demo
定义三个方法:
(1)testBufferedWrite方法—测试BufferedWriter
BufferedWriter的使用方法:
~~~
//1.创建一个输入字符文件
//2.定义一个FileWriter
//3.定义一个BufferedWriter
//4.写的操作
//5.关闭对应的流
~~~
(2)testBufferedReader方法—-向文件读内容
BufferedReader的使用方法:
~~~
//1.创建一个File文件
//2.定义一个FileReader
//3.定义一个BufferedReader
//4.执行读的操作
读的操作有二种方式,一各是按char来读,一种是按行来说。
一般来说按行来读是更简单,更有效的。
//5.关闭对应的流,可以只关闭最外面的流
~~~
(3)CopyFile方法—-复制字符文件
~~~
//1.定义输入和输出的文件
//2.分别定义FileReader,FileWriter
//3.分别定义BufferedReader,BufferedWriter
//4.实现复制功能
//5.关闭对应 的流,可以只关闭最外面的缓存流就可以
~~~
~~~
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedReaderBufferedWrite {
//复制字符文件
public static void CopyFile(String src,String des){
//3.分别定义BufferedReader,BufferedWriter
BufferedReader br = null;
BufferedWriter bw = null;
try {
//1.定义二个文件
File fsrc = new File(src);
File fdes = new File(des);
//2.分别定义FileReader,FileWriter
FileReader fr = new FileReader(fsrc);
FileWriter fw = new FileWriter(fdes);
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);
//4.复制操作
char[] c = new char[2];
int len;
while((len = br.read(c)) != -1){
bw.write(c, 0, len);
bw.flush();
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
//5.关闭对应 的流,可以只关闭最外面的缓存流就可以
if(bw != null){
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(br != null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//测试BufferedReader
public static void testBufferedReader(){
//3.定义一个BufferedReader
BufferedReader bf = null;
try {
//1.定义一个文件
File f1= new File("testBufferedWrite.txt");
//2.定义一个FileReader
FileReader fr = new FileReader(f1);
bf = new BufferedReader(fr);
//4.执行读的操作
//方式一
// char[] c = new char[2];
// int len;
// while((len = bf.read(c)) != -1){
// System.out.print(c);
// }
//方式二
String str;
while((str = bf.readLine()) != null){
System.out.print(str);
System.out.println();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//5.关闭对应的流,可以只关闭最外面的流
if(bf != null){
try {
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//测试BufferedWriter
public static void testBufferedWrite(){
//3.定义一个BufferedWriter
BufferedWriter bw = null;
try {
//1.定义一个文件
File f1 = new File("testBufferedWrite.txt");
//2.定义一个FileWriter
FileWriter fw = new FileWriter(f1);
bw = new BufferedWriter(fw);
//4.写的操作
String str = "测试BufferedWriter";
bw.write(str);
bw.newLine();
bw.write(str);
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//5.关闭对应的流
if(bw != null){
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
~~~
调用:
~~~
//BufferedWriter使用样例
BufferedReaderBufferedWrite.testBufferedWrite();
//测试BufferedReader
BufferedReaderBufferedWrite.testBufferedReader();
//复制字符文件
BufferedReaderBufferedWrite.CopyFile("testBufferedWrite.txt", "testBufferedWrite_copy.txt");
~~~
参考资料:
1.BufferedWriterapi文档
android_sdk_docs_offline/reference/java/io/BufferedWriter.html
2.BufferedReader文档
android_sdk_docs_offline/reference/java/io/BufferedReader.html
3.BufferedOutputStream与BufferedReader视频
[http://edu.csdn.net/course/detail/805/10967?auto_start=1](http://edu.csdn.net/course/detail/805/10967?auto_start=1)