-
节点流和处理流的区别和联系
1. 节点流是底层流/低级流,直接和数据源联系
2. 处理流是经过包装过后的节点流,也叫包装流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
3. 处理流(包装流)对节点流进行包装,使用的是修饰器设计模式,通在处理流类中定义一个父类的 reader/writer ,调用相关方法来操作传入的对应子类,而包装流则不会与数据源直接相连
-
修饰器模式和代理模式的区别
1. 修饰器模式强调的是增强自身,通过增强类的方法来调用原有类的方法,调用时不改变原有类的方法,只是通过增强类的方法调用原有类的方法而已
2. 代理模式通过实现目标类的接口实现静态或动态的代理,通过继承或实现原有类,重写原有类的方法来进行代理
-
BufferedReader 和 BufferedWriter 类
1. BufferedReader 和 BufferedWriter 都属于 Reader 和 Writer 的子类,所以都是属于字符流,适合用来操作文本文件
2. 关闭处理流时,只需要关闭外层流就行了
-
BufferedReader 类的常用方法
1. 构造函数
public BufferedReader(Reader in)
说明:创建使用默认大小的输入缓冲区的缓冲字符输入流
2. 读取一行字符串
public String readLine() throws IOException
返回值:读取到的一行字符串,以换行符('\ n')或回车符('\ r')为一行,若到达文件流末尾则返回 null
异常:IOException - 如果发生I / O错误
3. 关闭流
public void close() throws IOException
异常:IOException - 如果发生I / O错误
说明:底层会自动关闭传进来的节点流
public class BufferedReader_ {
public static void main(String[] args) throws IOException {
// 通过包装流来读取文件内容
String filePath = "d:\\a.txt";
// 创建 BufferedReader 包装流
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
// 按行读取文件内容
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
// 关闭流
bufferedReader.close();
}
}
-
BufferedWriter 类的常用方法
1. 构造方法
public BufferedWriter(Writer out)
说明:创建使用默认大小的输出缓冲区的缓冲字符输出流
2. 写入字符串
public void write(String str) throws IOException
参数:str - 要写入的字符串
异常:IOException - 如果发生I / O错误
3. 写入字符串的一部分
public void write(String s, int off, int len) throws IOException
参数:s - 要写入的字符串
off - 开始读取字符的偏移量
len - 要写入的字符数
异常:IOException - 如果发生I / O错误
4. 写入换行
public void newLine() throws IOException
异常:IOException - 如果发生I / O错误
5. 关闭流
public void close() throws IOException
异常:IOException - 如果发生I / O错误
说明:底层会自动关闭传进来的节点流
public class BufferedWrite_ {
public static void main(String[] args) throws IOException {
String filePath = "d:\\c.txt";
String content = "HSP 韩顺平教育";
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, true));
bufferedWriter.write(content);
bufferedWriter.newLine();
bufferedWriter.write(content);
bufferedWriter.newLine();
bufferedWriter.write(content);
bufferedWriter.close();
}
}
-
拷贝文件
public class BufferedCopy_ {
public static void main(String[] args) throws IOException {
String srcFilePath = "d:\\hello.txt";
String destFilePath = "d:\\helloCopy.txt";
String buffer;
BufferedReader bufferedReader = new BufferedReader(new FileReader(srcFilePath));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(destFilePath));
while ((buffer = bufferedReader.readLine()) != null) {
bufferedWriter.write(buffer);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
}
}