Day24—IO流-2

缓冲流

字节缓冲流

原理:底层自带了长度为8192的缓冲区提高性能

字符缓冲流

原理:底层自带了长度为8192的缓冲区提高性能

构造方法:

特有方法

  • BufferedReader:public String readLine(): 读一行文字。
  • BufferedWriter:public void newLine(): 写一行行分隔符,由系统属性定义符号。

转换流

InputStreamReader字符转换输入流

构造方法

  • InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流。
  • InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符流。

OutputStreamWriter字符转换输出流

构造方法

  • OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流。
  • OutputStreamWriter(OutputStream in, String charsetName): 创建一个指定字符集的字符流。

转换流的作用

指定字符集读写数据(JDK11之后已淘汰)

字节流要使用字符流中的方法时

序列化

序列化流/对象操作输出流

可以把Java中的对象写到本地文件中

构造方法

  • public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。把基本流包装成高级流。

成员方法

  • public final void writeObject (Object obj) : 将指定的对象写出。把对象序列化(写出)到文件中去。

反序列化流/对象操作输入流

构造方法

成员方法

细节汇总

①使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口,否则会出现会出现NotSerializableException异常

②序列化流写到文件中的数据时不能修改的,一旦修改就无法再次改回来

③系列化对象后,修改了Javabean类,再次反序列化会抛出InvaildClassException异常。解决方案:给Javabean类添加serialVersionUID(序列号、版本号)

④如果一个对象中的某个成员变量的值不想被序列化,则给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程

打印流

特点:

1.打印流只操作文件目的地,不操作数据源

2.特有的写出方法可以实现,数据原样写出

3.特有的写出方法,可以实现自动刷新,自动换行

字节打印流

字节流底层无缓冲区

构造方法

成员方法

字符打印流

字符流底层有缓冲区,想自动刷新需要开启

构造方法

成员方法

解压缩流/压缩流

解压缩流:负责把压缩包中的文件和文件夹解压出来

解压本质:把每一个ZipEntry按照层级拷贝到本地另一个文件夹中

压缩流:负责压缩文件或者文件夹

压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中

Commons-io

Commons是apache开源基金组织提供的工具包,里面有很多帮助我们提高开发效率的API

比如:

​ StringUtils 字符串工具类

​ NumberUtils 数字工具类

​ ArrayUtils 数组工具类

​ RandomUtils 随机数工具类

​ DateUtils 日期工具类

​ StopWatch 秒表工具类

​ ClassUtils 反射工具类

​ SystemUtils 系统工具类

​ MapUtils 集合工具类

​ Beanutils bean工具类

​ Commons-io io的工具类

​ 等等...

其中:Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包。

作用:提高IO流的开发效率

使用方式:

1.新建lib文件夹

2.把第三方jar包粘贴到文件夹中

3.右键点击add as a library

4.在类中打包使用

java 复制代码
public class CommonsIODemo1 {
    public static void main(String[] args) throws IOException {


        /* File src = new File("myio\\a.txt");
        File dest = new File("myio\\copy.txt");
        FileUtils.copyFile(src,dest);*/


        /*File src = new File("D:\\aaa");
        File dest = new File("D:\\bbb");
        FileUtils.copyDirectoryToDirectory(src,dest);*/

        /*File src = new File("D:\\bbb");
        FileUtils.cleanDirectory(src);*/



    }
}

Hutool工具包

java 复制代码
public class Test1 {
    public static void main(String[] args) {


       /* File file1 = FileUtil.file("D:\\", "aaa", "bbb", "a.txt");
        System.out.println(file1);//D:\aaa\bbb\a.txt

        File touch = FileUtil.touch(file1);
        System.out.println(touch);


        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("aaa");

        File file2 = FileUtil.writeLines(list, "D:\\a.txt", "UTF-8");
        System.out.println(file2);*/

      /*  ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("aaa");
        File file3 = FileUtil.appendLines(list, "D:\\a.txt", "UTF-8");
        System.out.println(file3);*/
        List<String> list = FileUtil.readLines("D:\\a.txt", "UTF-8");
        System.out.println(list);
    }
}
相关推荐
xieliyu.3 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
明夜之约3 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee3 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Jinkxs3 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
辣机小司3 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
CryptoPP4 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫4 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
fangdengfu1234 小时前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
云烟成雨TD4 小时前
Spring AI 1.x 系列【51】可观测性技术选型
java·人工智能·spring
星越华夏4 小时前
ESP32-CAM图像传输项目说明文档
java·后端·struts·esp32