Java的zip文件压缩与解压:ZipInputStream,ZipOutputStream

这篇具有很好参考价值的文章主要介绍了Java的zip文件压缩与解压:ZipInputStream,ZipOutputStream。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件压缩 ZipOutputStream

   用ZipOutputStream来压缩一个文件夹时,要搭配ZipEntry来使用。ZipEntry是用来创建压缩文件的。

  举个例子,向压缩文件中添加一个文件的代码:

//zipOut:压缩文件的路径
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOut));
//zipOutputStream.putNextEntry()  ====> 向压缩包中添加一个文件
//new ZipEntry("text1.txt") ======⇒ zip压缩包中文件都是用ZipEntry对象,
//"text1.txt"===》是文件在压缩文件的路径,text1.txt表示在压缩文件的根路径

zipOutputStream.putNextEntry(new ZipEntry("text1.txt"));

如下图:
java zip,java,ZipInputStream,ZipOutputStream,zip


  在创建ZipEntry对象时可以指定文件在压缩包的位置:new ZipEntry(“second-dir\second-01.txt”)


java zip,java,ZipInputStream,ZipOutputStream,zip
  在使用ZipOutputStream压缩文件时要注意的地方就是这些,下面给一个压缩文件的代码:



    static final int  BUFFER_SIZE = 4 << 10;
    /**
     * 压缩指定目录下的所有文件
     * @param dir 指定压缩目录
     * @param destZipName 指定压缩包名字
     */
    public void zip(String dir,String zipPath,String destZipName) throws IOException {
        File file = new File(dir);
        /**1.为zip文件创建目录*****/
        String path = file.getParentFile().getAbsolutePath();
        if(isNull(destZipName))destZipName = file.getName()+".zip";
        if(isNull(zipPath)) zipPath = path;
        String zipOut = zipPath + File.separator + destZipName;
        File zipOutFile = new File(zipOut);
        if(!zipOutFile.getParentFile().exists()){
            zipOutFile.getParentFile().mkdirs();
        }
       
        /**为zip文件创建目录*****/
        ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOut));
        if(!file.isDirectory())zipOutputStream.close();
        File[] subFiles = file.listFiles();
        for (File subFile : subFiles) {
            buildZipDir(zipOutputStream,subFile,null);
        }
        zipOutputStream.close();
    }

    void buildZipDir(ZipOutputStream zipOut,File file,String baseDir) throws IOException {
        if(file.isFile()){
            String zipEntryName = baseDir == null ? file.getName() : baseDir+File.separator+file.getName();
            zipOut.putNextEntry(new ZipEntry(zipEntryName));
            byte[] buffer = new byte[BUFFER_SIZE];
            try(InputStream inputStream = new FileInputStream(file)){
                int len = -1;
                while((len = inputStream.read(buffer)) != -1){
                    zipOut.write(buffer,0,len);
                }
                zipOut.flush();
                zipOut.closeEntry();
            }
        }
        else{//文件是dir,继续递归找文件
            File[] subFiles = file.listFiles();
            if(subFiles.length ==0){//处理空文件夹
                String zipName = baseDir == null ? file.getName() :baseDir + File.separator+ file.getName() ;
                zipOut.putNextEntry(new ZipEntry(zipName));
                zipOut.closeEntry();
            }else{
                for (File subFile : subFiles) {
                    String subBaseDir =baseDir == null ? file.getName() :baseDir + File.separator+ file.getName() ;
                    buildZipDir(zipOut,subFile,subBaseDir);
                }
            }
        }
    }


    public boolean isNull(String str){
        return str == null || str.equals("");
    }


测试:

    @Test
    public void testZip() throws IOException {
     String dir = "D:\\test-zip";
     //dir : 要压缩的目录
     //D:\\yy\\    指定压缩文件的位置
     //path-test.zip 指定压缩文件的名字
     zip(dir,"D:\\yy\\","path-test.zip");
    }


文件解压:ZipInputStream

  ZipInputStream读取压缩文件,配合ZipFile使用;通过上面的例子,我们知道压缩包里的是一个个ZipEntry对象,在解压时,可以遍历压缩包获取到ZipEntry对象。每一个ZipEntry对象都是一个文件,使用ZipFile可以获取到每一个ZipEntry对象的文件流;获取到文件流就可以将压缩包的文件读出来了。


    public void unZip(String zipPath,String unzipPath) throws IOException {
        File file = new File(zipPath);
        ZipFile zipFile = new ZipFile(file);//zip文件
        ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
        if(isNull(unzipPath))unzipPath = zipPath.replace(".zip","");
        ZipEntry nextEntry = null;
        while( (nextEntry = zipInputStream.getNextEntry()) != null){
            String name = nextEntry.getName();
            String fileOutPath = unzipPath + File.separator + name;
            File fileOut = new File(fileOutPath);
            if(!fileOut.getParentFile().exists()){
                fileOut.getParentFile().mkdirs();
            }
            if(!fileOut.exists()){
                fileOut.createNewFile();
            }

            OutputStream  output = new FileOutputStream(fileOutPath);
            InputStream inputStream = zipFile.getInputStream(nextEntry);//通过ZipFile获取到ZipEntry的文件流
            int read = -1;
            byte[] buffer = new byte[BUFFER_SIZE];
            while((read = inputStream.read(buffer) ) != -1){
                output.write(buffer,0, read);
            }
            output.flush();
            output.close();
            inputStream.close();
        }
        zipInputStream.close();
        zipFile.close();
    }



测试:

   public void testUnzip() throws IOException {
        String zip = "D:\\yy\\path-test.zip";
        unZip(zip,null);
    }


java zip,java,ZipInputStream,ZipOutputStream,zip文章来源地址https://www.toymoban.com/news/detail-602592.html

到了这里,关于Java的zip文件压缩与解压:ZipInputStream,ZipOutputStream的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux(Centos7)基本操作(1):文件压缩和解压(tar、zip)

    安装命令 yum install -y unzip zip 压缩文件: 基本格式: zip [参数] [压缩后的文件名] [打包的目录路径] 压缩文件:xxx是当前路径中需要压缩的文件夹: zip -r xxx.zip xxx/ ; 比如需要压缩文件夹 a 下所有的内容,就执行 zip -r a.zip a ; 如果是将其他目录下的文件压缩到当前路径,xxx前面

    2024年02月08日
    浏览(55)
  • 微信小程序下载zip压缩包后解压,并且打开文件查看的内容

            在开发pc端后台管理系统的时候,经常会遇到这样的需求:下载zip到本地,然后用户双击压缩包,并借助电脑端的压缩软件打开压缩包,就可以查看里面的word、excel、pdf文件里面的内容。(这种需求,毫无疑问,对于我们前端开发工程师来说,已经是习以为常了)。

    2024年02月08日
    浏览(54)
  • 轻量级力量:深入MiniZip库,实现C++中ZIP文件的简便压缩与解压

      MiniZip是一个轻量级的压缩库,它是zlib库的一部分,用于在C++中进行ZIP文件的压缩和解压缩操作。以下是MiniZip的一些功能和优点: 功能: 创建ZIP文件:  MiniZip可以用于创建包含一个或多个文件的ZIP归档。 压缩:  MiniZip支持使用不同的压缩算法对文件进行压缩,例如DEFL

    2024年02月04日
    浏览(40)
  • Linux 压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    Linux 压缩、解压文件的方式有如下几种: tar 是一种常用的打包工具,可以将多个文件或目录打包成一个 tar 包,也可以将一个 tar 包解压缩到指定的目录。 1.1. 压缩: 1.2. 解压: 1.3. tar 命令各参数含义 tar 命令是 Linux 下常用的打包和压缩工具,用于将多个文件或目录打包成一

    2024年02月10日
    浏览(52)
  • 【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    目录 1、使用 tar 命令: 1.1. 压缩: 1.2. 解压: 1.3. tar 命令各参数含义 2. gzip、gunzip gzip 命令: 压缩文件: 保留原始文件,创建压缩文件: 保留原始文件,显示压缩进度: gunzip 命令: 解压文件: 保留压缩文件,创建原始文件: 保留压缩文件,显示解压进度: 3. zip、unzip

    2024年02月03日
    浏览(50)
  • java解压zip文件

    zip文件目录结构如下: 其中,word下面还有多个子目录,可以递归进行解压目录,核心代码如下:

    2024年02月11日
    浏览(55)
  • linux_文件压缩、文件解压(gzip命令、gunzip 命令、bzip2命令、bunzip2命令、tar命令、rar命令、zip命令)

    接上一篇:linux用户管理(查看在线用户who命令、创建用户adduser命令、创建用户组groupadd命令、查看用户组groups命令、删除用户、设置用户密码passwd命令) 本次来分享怎样在 linux中压缩和解压文件夹 ,在linux中压缩解压的方式有 5种 ,分别是 gz格式压缩解压、bz2格式压缩解压、

    2024年02月01日
    浏览(98)
  • zip解压和压缩

    引言 介绍zip文件的概念 涉及到的Java类和包: java.util.zip https://blog.csdn.net/u012998680/article/details/126060855 压缩文件 准备压缩的源文件和目标zip文件的路径 创建 FileOutputStream 和 ZipOutputStream 对象 创建源文件的 File 和 FileInputStream 对象 创建 ZipEntry 对象,并设置其名称为源文件的名

    2024年02月11日
    浏览(88)
  • Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

    bit7z 一个c++静态库,为 7-zip 共享库提供了一个干净简单的接口 使用 CMAKE 重新编译 github 上的 bit7z 库,用来解压/预览 iso9660 , WIm , Zip , Rar 等常用的压缩文件格式。 z-zip 库支持大多数压缩文件格式 bit7z 是一个跨平台的c++静态库,它允许通过一个干净简单的包装器接口从7-

    2024年02月11日
    浏览(81)
  • Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(二)

    修改qt5 7zip源码编译及使用(含展示进度)一文中的封装类ZlibHelper代码类,继承多线程,使解压,压缩时进度条不影响界面,同时添加压缩文件中的文件预览功能,建议直接看源码 lib_bit7z.h 头文件代码

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包