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

专栏【JavaSE】
喜欢的诗句:天行健,君子以自强不息。
音乐分享【如愿】
欢迎并且感谢大家指出小吉的问题

文章目录

  • 打印流
    • 字节打印流
    • 字符打印流
  • 解压缩流
    • ✨解压的本质
    • 代码实现
  • 压缩流
    • 压缩单个文件
    • 压缩文件夹

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

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

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

打印流

打印流一般指PrintStream,PrintWriter两个类
【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)_第1张图片

字节打印流

字节

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)_第2张图片

字节流底层没有缓冲区,开不开启自动刷新都一样

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)_第3张图片

字符打印流

字符

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)_第4张图片

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

【从入门到起飞】JavaSE—IO高级流(2)(打印流,压缩流)_第5张图片

解压缩流

要解压的压缩包最好是.zip

✨解压的本质

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

代码实现

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

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)(打印流,压缩流)_第7张图片

压缩流

压缩单个文件

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());
            }
        }
    }
}

大家对于这篇文章如果有问题,欢迎在评论区进行讨论

你可能感兴趣的:(Java基础,java,数据库,网络)