IO流2.0 缓冲流 序列化 字符打印 printf格式 压缩流 工具包

 04 缓冲流Buffered

4.1字节缓冲流

4.2 字符缓冲流

newLine();在底层自动识别操作系统类别和换行符 其实就是输出换行符;

4.2.1 BufferedReader(字符为单位 尽量用于文本文件) 

不要去操作 二进制文件[声音,视频 ], 可能造成文件损坏

throws Exception {
        String filePath = "e:\\a.java";
        //创建bufferedReader
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
        //读取
        String line; //按行读取, 效率高
        //说明
        //1. bufferedReader.readLine() 是按行读取文件 返回一个字符串
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);        //2. 当返回null 时,表示文件读取完毕
        }
        //关闭流, 这里注意,只需要关闭 BufferedReader(外层流),因为底层会自动的去关闭 节点流
        /*
            public void close() throws IOException {//底层源码 自动关闭节点流
                synchronized (lock) {
                    if (in == null)
                        return;
                    try {
                        in.close();//in 就是我们传入的 new FileReader(filePath), 关闭了.
                    } finally {
                        in = null;
                        cb = null;
                    }
                }
            } */
        bufferedReader.close();
    }

4.2.2 BufferedWriter

{        String filePath = "d:\\ok.txt";
        //创建BufferedWriter      说明:
        //1. new FileWriter(filePath, true) 表示以追加的方式写入
        //2. new FileWriter(filePath) , 表示以覆盖的方式写入
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));
        bufferedWriter.write("hello, 韩顺平教育!");
        bufferedWriter.newLine();//插入一个和系统相关的换行
        bufferedWriter.write("hello2, 韩顺平教育!");     bufferedWriter.newLine();
        bufferedWriter.write("hello3, 韩顺平教育!");     bufferedWriter.newLine();
        //说明:关闭外层流即可 , 传入的 new FileWriter(filePath) ,会在底层关闭
        bufferedWriter.close();
    }

4.3综合练习

四种方式拷贝文件

把《出师表》按段落顺序恢复到新txt文件里;   法2:Tree集合自动排序

 5.0转换流(字节流与字符流转换)

5.1序列化(对象处理)流 

5.1.1ObjectInputStream ObjectOutputStream


5.1.2 序列化流细节


如果javabeen类改动 也会改变版本号 解决方法:固定版本号
idea设置 (根据javabeen)自动生成版本号
勾选两条  新版本idea中 class without 'serialVersionUID'在JVM中


5.1.3综合练习

 

应用ObjectOutputStream 序列化一个Dog(name,age)并保存到data.dat文件中

throws Exception {
        //序列化后,保存的文件格式,不是存文本,而是按照他的格式来保存
        String filePath = "e:\\data.dat";
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));

        //序列化数据到 e:\data.dat
        oos.writeInt(100);// int -> Integer自动装箱 (实现了 Serializable)
        oos.writeBoolean(true);// boolean -> Boolean (实现了 Serializable)
        oos.writeChar('a');// char -> Character (实现了 Serializable)
        oos.writeDouble(9.5);// double -> Double (实现了 Serializable)
        oos.writeUTF("韩顺平教育");//String
        //保存一个dog对象
        oos.writeObject(new Dog("旺财", 10, "日本", "白色"));
        oos.close();
        System.out.println("数据保存完毕(序列化形式)");       }

5.2打印流


5.2.1字节打印流PrintStream


字节流底层没有缓冲区,开不开自动刷新都 所有数据直接写到文件目的地

5.2.2字符打印流PrintWriter

5.3解压缩流/压缩流 (Java只识别.ZIP压缩文件)

 5.3.1解压缩流

 
zip.close();}

 5.3.2 压缩流


ZipEntry entry=new ZipEntry("aaa//a.txt"); //  参数如果是多级 可表示创建多级文件夹

 

5.3.3 常用工具包(Commons-io)

 5.3.4 常用工具包(Hutool)  Hutool — 🍬A set of tools that keep Java sweet. 

posted @ 2022-12-20 20:29  软工菜鸡  阅读(3)  评论(0编辑  收藏  举报  来源