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);
    }
}
相关推荐
CS生1 小时前
Rust环境准备
开发语言·后端·rust
Dxy12393102162 小时前
Python生成随机手机号码
开发语言·python
历程里程碑2 小时前
普通数组---合并区间
java·大数据·数据结构·算法·leetcode·elasticsearch·搜索引擎
小帅学编程2 小时前
Python学习
开发语言·python·学习
下北沢美食家2 小时前
Express框架入门
开发语言·javascript·express
高斯林.神犇2 小时前
idea快捷键
java·ide·intellij-idea
遥望九龙湖2 小时前
打包动态库
开发语言·c++·visualstudio
m0_531237173 小时前
C语言-编程实例2
c语言·开发语言