缓冲流(字符型)实现文本文件的复制
- 使用缓冲流可以提高文件读取的速度
字符型缓冲流读取数据的时候可以一行文本一行文本的进行读取
-
也就是使用BufferedReader类中的readLine()方法
-
readLine();
- 如果这一行有内容 ,这个时候就将这一行的内容读取并以一个String对象返回
- 如果这一行没有内容, 这个时候就返回一个null
注意: 这个方法一次读取一行的数据,但是使用readLine()方法读取的数据不包含换行的操作 — 这个时候我们写出使用readLine()方法读取的数据的时候就会发现写出到了一行
- 为了解决这个问题: 我们就要手动的添加换行
- 在每次写出的数据后加"\n";
- 在每次写出数据之后调用newLine()方法
-
字符型缓冲流写出数据的时候可以写出String类型的数据:
- 这个时候如果我们要写出的数据是我们使用readLine()方法读取的, 这个时候就要在每次写出的String类型数据后面手动加"\n",或者调用newLine()方法
缓冲流中提供了一个缓冲区
- 如果是字节型缓冲流就提供一个8192个byte大小的缓冲区
- 如果是字符型缓冲流就提供了一个8192个字符大小的缓冲区
- 我们的缓冲区就是提供一个暂存的功能
eg: 这里我们给出一个例子: — 通过这个例子来掌握使用字符型缓冲流实现文本文件的复制
使用BufferedReader和BufferedWrite实现文本文件的复制
package IO流.Buffered;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException{
/*
创建缓冲流对象(这里我们直接将节点流对象以匿名对象的形式传入了缓冲流对象构造方法中)
*/
BufferedReader br = new BufferedReader(new FileReader(new File("Hello.txt")));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("Hello3.txt")));
/*
创建缓冲char []
*/
char [] chars = new char[1024];
/*
创建一个临时变量 -- 这个临时变量用来存储read()方法的返回值
*/
int len = 0;
/*
进行文件数据的读入和写出
*/
while((len = br.read(chars)) != -1){
bw.write(chars,0,len);
}
/*
关闭流资源
*/
bw.close();
br.close();
}
}
-
这里我们使用throws + 异常类型的方式处理了异常
- 这里我们是为了条例更加清晰 – 但是我们在实际编程中应该使用try – catch – finally的方式来处理异常,将我们流资源的关闭放到finally代码块中
-
这里我们使用String(字符串)作为缓冲:
package IO流.Buffered;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException{
/*
创建缓冲流对象(这里我们直接将节点流对象以匿名对象的形式传入了缓冲流对象构造方法中)
*/
BufferedReader br = new BufferedReader(new FileReader(new File("Hello.txt")));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("Hello3.txt")));
/*
创建一个临时变量,用来暂存每一次的读取的数据
*/
String data = null;
while((data = br.readLine()) != null){
/*
由于我们使用readLine()方法读取数据的时候一次读取一行,读取到的时候不读取换行符
所以这个时候我们写出的时候就会将原本的数据都写到一行中,我们为了将文件还原成和原文件
一模一样,这个时候我们就要给我们每次输出的数据末尾加一个换行,或者我们使用BufferedWriter
类中的newLine()方法来加换行
其实我们调用newLine()方法就是进行了一次换行
*/
/*
这我们就是使用了每次手动在写出的数据后面加换行
*/
// bw.write(data + "\n");
/*
这里我们就是调用newLine()方法进行换行
*/
bw.write(data);
bw.newLine();
}
/*
关闭流资源
*/
bw.close();
br.close();
}
}