import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//BufferedReader 字符读取流缓冲区: 该缓冲区提供了一次读一行的方法readLine(),方便对于文本数据的获取
//当返回null时,表示读到文件末尾
//readline方法返回的时候只返回回车符之前的数据内容,并不返回回车符。
public class BufferedReaderDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//(1)
/*
FileReader fr = null;
BufferedReader br = null;
try {
//创建一个读取流对象和文件相关联
fr = new FileReader("src/BufferedReaderDemo.java");
//为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数
br = new BufferedReader(fr);
String linStr = null;
try {
while ((linStr = br.readLine())!=null) {
System.out.println(linStr);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
*/
//(2)通过缓冲区复制一个.java文件
BufferedWriter bw = null;
BufferedReader br = null;
try {
bw = new BufferedWriter(new FileWriter("copy.txt"));
br = new BufferedReader(new FileReader("src/BufferedReaderDemo.java"));
String line = null;
//readLine()方法的原理 无论读一行,获取多个字符。其实最终
//都是在硬盘上一个一个读取。所以最终使用的还是read方法一次读一个的方法
while ((line=br.readLine())!=null) {
System.out.println(line);
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
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();
}
}
}
}