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),否则写入不到指定的文件
image
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
image

BufferedReader/BufferedWriter可以处理文件,数组,数据源等数据(修饰器模式)
BufferedReader类中有属性Reader,即封装了一个节点流,该节点流可以使任意的,只要是Reader子类
BufferedWriter类中有属性Writer,即封装了一个节点流,该节点流可以使任意的,只要是Writer子类
个人理解:BufferedReader/BufferedWriter分别有一个Reader/Writer的属性,所以可以使用Reader/Writer下的所有子类
image
image

  • 节点流和处理流的区别和联系
    1.节点流是底层流/低级流,直接跟数据相接
    2.处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
    3.处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据相连

  • 处理流的功能主要体现
    1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率
    2.操作的便捷:处理流可能提供了一系列便捷的方法来一次性输入输出大批量数据,使用更加灵活方便

处理流设计模式
1,创建一个抽象类Reader_,这个类中有两个空方法,一个是对文件进行读取的,一个是对字符串进行读取的(readFile()和readString())
2,创建两个类(FileReader_和StringRead_),继承抽象类Reader_,其中各有一个方法分别是读取文件(readFile())和字符串(readString())(此处不是空方法)
3,创建一个BufferReader类,其中有一个私有属性reader_是Reader_类型的,并且重写构造器,用来接收Reader_的子类,然后就可以在此处使用Reader_来调用这两个子类的读取文件和读取字符串的方法
image

4,创建一个测试类,可以通过newBufferedReader类,然后传入一个FileRead_或者StringRead_,然后就可以使用
image

个人理解:相当于利用了继承和多态的理念,对原本的父抽象类的方法进行了重写,然后在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();

    }
posted @   不再犹豫27  阅读(98)  评论(0编辑  收藏  举报
编辑推荐:
· .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 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示