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

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

四. 压缩文件 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


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

相关文章
|
6月前
|
存储 C++
基于C++的简易文件压缩与解压缩工具设计与实现
基于C++的简易文件压缩与解压缩工具设计与实现
242 3
|
C++ Python
哈夫曼编码实现文件的压缩和解压
哈夫曼编码实现文件的压缩和解压
140 0
|
4月前
|
Linux
c创建压缩文件,用于压缩模式,-v显示压缩进程,-x解压模式,-f创建的文件,解压文件,tar -cvf
c创建压缩文件,用于压缩模式,-v显示压缩进程,-x解压模式,-f创建的文件,解压文件,tar -cvf
|
5月前
1078 字符串压缩与解压 (20 分)
1078 字符串压缩与解压 (20 分)
|
测试技术
【解决方案 十四】文件夹压缩及解压、递归删除文件夹
【解决方案 十四】文件夹压缩及解压、递归删除文件夹
113 0
Linux文件系统(三)文档压缩及解压缩
Linux文件系统(三)文档压缩及解压缩
|
Java 程序员
批量压缩16万个文件夹为压缩包(.zip格式)
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
277 0
批量压缩16万个文件夹为压缩包(.zip格式)
|
开发工具 C++
C/C++ 自制一个基于zlib的文件的(解)压缩系统
C/C++ 自制一个基于zlib的文件的(解)压缩系统
524 0
C/C++ 自制一个基于zlib的文件的(解)压缩系统
|
存储 自然语言处理 算法
4.1 打包和压缩的概念和区别
在讲解具体的归档命令和压缩命令之前,先来了解一下归档和压缩所各自代表的含义。
236 0
4.1 打包和压缩的概念和区别
|
Java Linux Windows
压缩和解压缩文件(十一)上
压缩和解压缩文件(十一)
173 0
压缩和解压缩文件(十一)上