IO流第35天(FileWrite,节点流\处理流的介绍,处理流设计模式,BufferedReader使用)
FileWriter
FileWrite常用方法
1)new FileWrite(File/String)//覆盖模式
2)new FileWrite(File/String,true)//追加模式
3)write(int)//写入单个字符
4)write(char[])//写入指定数组
5)write(char[],off,len)//写入指定数组的指定部分
6)write(String)//写入整个字符串
7)write(String,off,len)//写入字符串的指定部分
注意:FileWrite使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件
FileWriter
使用FileWrite将”风雨之后,定见彩虹”写入到文件note.txt文件中
FileWriter
使用FileWrite将”风雨之后,定见彩虹”写入到文件note.txt文件中
@Test
public void writerFile01(){
//使用FileWrite将”风雨之后,定见彩虹”写入到文件note.txt文件中
String filePath="d:\\note.txt";
FileWriter fileWriter=null;
char[]chars= {'风','雨','之','后',',','定','见','彩','虹','!'};
int writeLen=0;
String str="风雨之后,定见彩虹";
try {
fileWriter=new FileWriter(filePath);
// //1,写入单个字符
// fileWriter.write('H');
//2.使用char[]数组
// fileWriter.write(chars);
// //3.使用char[]数组,写入指定内容
fileWriter.write(chars,2,6);
// //4.使用字符串
// fileWriter.write(str);
} catch (IOException e) {
e.printStackTrace();
} finally {
//FileWriter一定要关闭流,或者flush()刷新,才能真正的将数据写入文件中
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("程序结束");
}
节点流处理流
基本介绍
节点流可以从一个特定的数据源读取数据,如FileReader,FileWriter
关闭处理流时,只需要关闭外层流即可(在关闭外层包装流的时候,系统会自动关闭它所包装的节点流)
处理流(也叫包装流)是连接已存在的流(节点或处理流)之上,为程序提供更强大的读写功能,而且更加灵活,如BufferedReader,BufferWriter
BufferedReader/BufferedWriter可以处理文件,数组,数据源等数据(修饰器模式)
BufferedReader类中有属性Reader,即封装了一个节点流,该节点流可以使任意的,只要是Reader子类
BufferedWriter类中有属性Writer,即封装了一个节点流,该节点流可以使任意的,只要是Writer子类
个人理解:BufferedReader/BufferedWriter分别有一个Reader/Writer的属性,所以可以使用Reader/Writer下的所有子类
-
节点流和处理流的区别和联系
1.节点流是底层流/低级流,直接跟数据相接
2.处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
3.处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据相连 -
处理流的功能主要体现
1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率
2.操作的便捷:处理流可能提供了一系列便捷的方法来一次性输入输出大批量数据,使用更加灵活方便
处理流设计模式
1,创建一个抽象类Reader_,这个类中有两个空方法,一个是对文件进行读取的,一个是对字符串进行读取的(readFile()和readString())
2,创建两个类(FileReader_和StringRead_),继承抽象类Reader_,其中各有一个方法分别是读取文件(readFile())和字符串(readString())(此处不是空方法)
3,创建一个BufferReader类,其中有一个私有属性reader_是Reader_类型的,并且重写构造器,用来接收Reader_的子类,然后就可以在此处使用Reader_来调用这两个子类的读取文件和读取字符串的方法
4,创建一个测试类,可以通过newBufferedReader类,然后传入一个FileRead_或者StringRead_,然后就可以使用
个人理解:相当于利用了继承和多态的理念,对原本的父抽象类的方法进行了重写,然后在BufferedReader_类中定义了一个父抽象类的属性,重写它的构造器,就可以使用它本身或者加强的方法了
BufferedReader使用
使用BufferedRead读取文本文件,并显示在控制台
public static void main(String[] args) throws Exception {
//创建文件路径
String filePath="d:\\BuRead.txt";
//创建BufferedReader对象
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
//读取文件
String len;
//bufferedReader.readLine() 按行读取,效率更高,当返回null时,代表文件读取完毕
while ((len= bufferedReader.readLine())!=null)
{
System.out.println(len);
}
//使用完后关闭流,只需要关闭BufferedReader即可,底层会自动关闭FileReader(filePath
bufferedReader.close();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?