压缩和解压缩文件(十一)下

简介: 压缩和解压缩文件(十一)

四. 压缩文件 ZipFile


public class ZipFile implements ZipConstants, Closeable {
}


四.一 方法


四.一.一 构造方法


四.一.一.一 方法


image.png


四.一.一.二 演示


   @Test
    public void zipFileConTest() throws Exception{
        //第一种方式,传入文件
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a.zip");
        ZipFile zipFile=new ZipFile(file);
        //第二种方式,传入文件的路径
        String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a.zip";
        ZipFile zipFile1=new ZipFile(path);
    }


四.一.二 其他方法


image.png


四.二 演示压缩文件 ZipFile


四.二.一 获取压缩文件的基本信息


 @Test
    public void zipFileTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a.zip");
        ZipFile zipFile=new ZipFile(file);
        System.out.println("获取文件注释:"+zipFile.getComment());
        System.out.println("文件名称:"+zipFile.getName());
        System.out.println("文件大小:"+zipFile.size());
        //根据名称,获取 zipEntry
        ZipEntry zipEntry=zipFile.getEntry("data.txt");
        System.out.println("输出名称:"+zipEntry.getName());
        //根据 zipEntry 获取 输入流
        InputStream inputStream=zipFile.getInputStream(zipEntry);
        System.out.println("*************************");
        //获取压缩文件下的所有条目
        Enumeration<? extends ZipEntry> entries = zipFile.entries();
       while(entries.hasMoreElements()){
           ZipEntry temp=entries.nextElement();
           System.out.println("输出名称:"+temp.getName());
       }
    }


运行程序, 控制台打印输出:


2020061819513253.png


四.二.二 根据条目文件名称,解压缩单个文件


@Test
    public void zipFile1Test() throws Exception{
        //1. 先定义好输出流
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"解压缩单个文件.txt");
        OutputStream outputStream=new FileOutputStream(file);
        //找到压缩文件
        File inputFile=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a.zip");
        ZipFile zipFile=new ZipFile(inputFile);
        //根据名称,获取 ZipEntry。 只解压缩 a.zip 中的 data.txt 文件
        ZipEntry zipEntry=zipFile.getEntry("data.txt");
        //获取输入流
        InputStream inputStream=zipFile.getInputStream(zipEntry);
        byte[] bytes=new byte[1024];
        int len=-1;
        //读出
        while((len=inputStream.read(bytes))!=-1){
            //写入
            outputStream.write(bytes,0,len);
        }
        outputStream.close();
        inputStream.close();
    }


运行程序,查看文件系统


20200618195138884.png


内容也是有的,与 a.zip 文件下的 data.txt 内容一致。


现在解压缩,我们知道要解压缩的文件名称,然而大部分情况下,是不知道要解压缩的文件名称的。


五. ZipInputStream


解压缩文件的输入流。


五.一 方法


五.一.一 构造方法


五.一.一.一 方法


image.png


五.一.一.二 举例


 @Test
    public void zipInputStreamConTest() throws Exception{
        //File inputFile=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
         //       +File.separator+"jdk91.zip");
        File inputFile=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a.zip");
        InputStream inputStream=new FileInputStream(inputFile);
    // 传入输入流 
        ZipInputStream zipInputStream=new ZipInputStream(inputStream);
  }


五.一.二 其他方法


image.png


五.二. 举例 ZipInputStream


五.二.一 解压缩文件


 //解压缩文件
    @Test
    public void zipFile2Test() throws Exception{
        //1. 先定义好解压缩的文件
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"c");
        //找到压缩文件
        File inputFile=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"a.zip");
        InputStream inputStream=new FileInputStream(inputFile);
        //输入流
        ZipInputStream zipInputStream=new ZipInputStream(inputStream);
        //压缩文件
        ZipFile zipFile=new ZipFile(inputFile);
        //定义每一个文件
        ZipEntry zipEntry=null;
        //先看父存不在
        if(file.getParent()==null){
            file.mkdirs();
        }
        while((zipEntry=zipInputStream.getNextEntry())!=null){
            //说明有子。
            String name=zipEntry.getName();
            //解压到当前的目录。
            File newFile=new File(file,name);
            if(!newFile.getParentFile().exists()){
                newFile.getParentFile().mkdirs();
            }
            //创建当前文件
            if(!newFile.exists()){
                newFile.createNewFile();
            }
            //获取每一个流,根据 zipEntry
            InputStream inputStream1=zipFile.getInputStream(zipEntry);
            //替换型
            OutputStream newOutputStream=new FileOutputStream(newFile);
            byte[] bytes=new byte[1024];
            int len=-1;
            while((len=inputStream1.read(bytes))!=-1){
                //写入
                newOutputStream.write(bytes,0,len);
            }
            newOutputStream.close();
            inputStream1.close();
        }
        System.out.println("文件夹解压缩成功");
        zipInputStream.close();
        inputStream.close();
    }


现在,系统里面没有 c 文件夹。


运行程序,查看文件系统,解压缩成功。


20200618195145960.png


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

相关文章
|
1月前
|
存储 C++
基于C++的简易文件压缩与解压缩工具设计与实现
基于C++的简易文件压缩与解压缩工具设计与实现
41 3
|
13天前
1078 字符串压缩与解压 (20 分)
1078 字符串压缩与解压 (20 分)
|
1月前
|
前端开发 JavaScript Java
文件在线压缩与解压系统
文件在线压缩与解压系统
Linux文件系统(三)文档压缩及解压缩
Linux文件系统(三)文档压缩及解压缩
|
Java Linux Windows
压缩和解压缩文件(十一)上
压缩和解压缩文件(十一)
156 0
压缩和解压缩文件(十一)上
最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。
最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。
214 0
最新!压缩为rar格式方法,目前只能用:WinRAR压缩工具-rar压缩格式的版权所有者。
|
监控 算法 Cloud Native
开发函数计算的正确姿势——使用 brotli 压缩大文件
函数计算对上传的 zip 代码包尺寸限制为 50M。某些场景中代码包中会超过这一限制,比如未经裁剪的 serverless-chrome,类似的还有 libreoffice ,此外常见的还有机器学习训练的模型文件。本文会比较几种常见的解决大文件的方案,并重点介绍借助 brotli 提高压缩比的方法。
开发函数计算的正确姿势——使用 brotli 压缩大文件
|
Serverless 对象存储 弹性计算
函数计算对文件进行压缩和解压缩使用总结
前言 函数计算具有弹性伸缩的能力,可以给用户带来免运维和毫秒级扩容的计算能力。 但是它也存在一些限制, 比如一个执行环境最大内存只有3G, 本文旨在进行总结一些函数计算在文件压缩和解压缩的一些实践案例, 希望能给大家抛砖引玉,引出更好的实践案例。
2907 0
|
算法
算法学习之路|字符串压缩与解压
文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。
1827 0