输入/输出流(I/O流)是用于处理输入和输出操作的数据流。在计算机编程中,I/O流通常用于从文件、网络连接、内存或其他来源读取数据,或将数据写入这些地方。

I/O流可分为输入流和输出流:

输入流:用于从数据源(如文件、键盘、网络连接等)读取数据。
输出流:用于向数据目标(如文件、屏幕、网络连接等)写入数据。
在许多编程语言中,都提供了用于处理I/O流的标准库或模块,开发人员可以使用这些工具来进行文件读写、网络通信等操作。I/O流的概念也适用于各种类型的数据处理,包括文本数据、二进制数据等。
【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP

🎄打印流

打印流一般指PrintStream,PrintWriter两个类
【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP

🛸字节打印流

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP

🛸字符打印流

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP

🎄解压缩流

✨解压的本质

把压缩包里面的每一个文件或者文件夹读取出来,按照层级拷贝到目的地中

🛸代码实现

我们在G盘创建一个压缩包aaa.zip,里面包含了文件夹a,文件夹里面有a.txt
【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP
我们运行下面的代码,来验证解压效果

package com.itheima.myzipstream;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/*
*   解压缩流
*
* */
public class ZipStreamDemo1 {
    public static void main(String[] args) throws IOException {

        //1.创建一个File表示要解压的压缩包
        File src = new File("G:\\aaa.zip");
        //2.创建一个File表示解压的目的地
        File dest = new File("G:\\");

        //调用方法
        unzip(src,dest);

    }
    //定义一个方法用来解压
    public static void unzip(File src,File dest) throws IOException {
        //创建一个解压缩流用来读取压缩包中的数据
        ZipInputStream zip = new ZipInputStream(new FileInputStream(src));
        //要先获取到压缩包里面的每一个zipentry对象
        //表示当前在压缩包中获取到的文件或者文件夹
        ZipEntry entry;
        while((entry = zip.getNextEntry()) != null){
            System.out.println(entry);
            if(entry.isDirectory()){
                //文件夹:需要在目的地dest处创建一个同样的文件夹
                //调用toString方法,变为字符串
                File file = new File(dest,entry.toString());
                file.mkdirs();
            }else{
                //文件:需要读取到压缩包中的文件,并把他存放到 目的地dest文件夹 中(按照层级目录进行存放)
                //new出来的文件路径和之前的一样
                FileOutputStream fos = new FileOutputStream(new File(dest,entry.toString()));
                int b;
                while((b = zip.read()) != -1){
                    //写到目的地
                    fos.write(b);
                }
                fos.close();
                //表示在压缩包中的一个文件处理完毕了。
                zip.closeEntry();
            }
        }

        zip.close();

    }
}

解压成功了
【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)-LMLPHP

🎄压缩流

🛸压缩单个文件

package com.itheima.myzipstream;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo2 {
    public static void main(String[] args) throws IOException {
        /*
         *   压缩流
         *      需求:
         *          把D:\\a.txt打包成一个压缩包
         * */
        //1.创建File对象表示要压缩的文件
        File src = new File("D:\\a.txt");
        //2.创建File对象表示压缩包的位置
        File dest = new File("D:\\");
        //3.调用方法用来压缩
        toZip(src,dest);
    }

    /*
    *   作用:压缩
    *   参数一:表示要压缩的文件
    *   参数二:表示压缩包的位置
    * */
    public static void toZip(File src,File dest) throws IOException {
        //1.创建压缩流关联压缩包
        //des是父级路径
        //a.zip是子级路径
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest,"a.zip")));
        //2.创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹
        //参数:压缩包里面的路径
        ZipEntry entry = new ZipEntry("aaa\\bbb\\a.txt");
        //3.把ZipEntry对象放到压缩包当中
        zos.putNextEntry(entry);
        //4.把src文件中的数据写到压缩包当中
        FileInputStream fis = new FileInputStream(src);
        int b;
        while((b = fis.read()) != -1){
            zos.write(b);
        }
        zos.closeEntry();
        zos.close();
    }
}

🛸压缩文件夹

package IODemo4;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        //创建File对象表示要压缩的文件夹
        File src=new File("G:\\aaa");
        //创建压缩包需要被放到哪里(压缩包的父级路径)
        File destParent = src.getParentFile();//G:\\
        //创建File对象表示压缩包的路径
        File dest=new File(destParent,src.getName()+".zip");
        //创建压缩流关联压缩包
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(dest));
        //获取src里面的每一个文件,变成ZipEntry对象,放到压缩包里面
        toZip(src,zos,src.getName());
        //释放资源
        zos.close();
    }
    public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
        //进入src文件夹
        File[] files=src.listFiles();
        //遍历数组
        for (File file:files){
            if (file.isFile()){
                //是 文件,变成ZipEntry对象,放到压缩包中
                ZipEntry entry=new ZipEntry(name+"\\"+file.getName());
                zos.putNextEntry(entry);
                //读取文件中的数据,写到压缩包
                FileInputStream fis=new FileInputStream(file);
                int b;
                while ((b=fis.read())!=-1){
                    zos.write(b);
                }
                fis.close();
                zos.closeEntry();
            }else {
                //文件夹
                toZip(file,zos,name+"\\"+file.getName());
            }
        }
    }
}

11-15 13:56