Java重修笔记 第六十一天 坦克大战(十一)IO 流 - 节点流和处理流、BufferedReader 和 BufferedWriter
-
节点流和处理流的区别和联系
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();}
}