Java利用Apache compress包实现文件夹压缩成Zip包

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

Apache common提供了很多实用的工具包,下面就说一下如何用compress包来压缩文件夹。先引入compress,io和lang3这3个工具包:

 <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.9</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8</version>
        </dependency>
    </dependencies>

这个方法实现了将文件夹下所有的文件压缩成zip包,并输出到文件流中,可以直接写入到文件或提供给前端下载,工具类如下:

import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;

public class ZipUtils {

    /**
     * 压缩文件夹下的所有文件
     * @param dir          要压缩的文件夹
     * @param outputStream 输出压缩后的文件流
     * @throws IOException      IO异常
     * @throws ArchiveException 压缩异常
     */
    public static void zip(File dir, OutputStream outputStream) throws IOException, ArchiveException {
        ZipArchiveOutputStream zipOutput = null;
        try {
            zipOutput = (ZipArchiveOutputStream) new ArchiveStreamFactory()
                    .createArchiveOutputStream(ArchiveStreamFactory.ZIP, outputStream);
            zipOutput.setEncoding("utf-8");
            zipOutput.setUseZip64(Zip64Mode.AsNeeded);
            Collection<File> files = FileUtils.listFilesAndDirs(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);

            for (File file : files) {
                InputStream in = null;
                try {
                    if (file.getPath().equals(dir.getPath())) {
                        continue;
                    }
                    String relativePath = StringUtils.replace(file.getPath(), dir.getPath() + File.separator, "");
                    ZipArchiveEntry entry = new ZipArchiveEntry(file, relativePath);
                    zipOutput.putArchiveEntry(entry);
                    if (file.isDirectory()) {
                        zipOutput.closeArchiveEntry();
                        continue;
                    }

                    in = new FileInputStream(file);
                    IOUtils.copy(in, zipOutput);
                    zipOutput.closeArchiveEntry();
                } finally {
                    if (in != null) {
                        IOUtils.closeQuietly(in);
                    }
                }
            }
            zipOutput.finish();
        } finally {
            IOUtils.closeQuietly(zipOutput);
        }
    }

    public static void main(String args[]) throws IOException, ArchiveException {
        //要压缩的文件路径
        File dir = new File("C:\\data\\data");
        //压缩后zip包文件路径
        File dest = new File("C:\\data\\test.zip");
        OutputStream outputStream = new FileOutputStream(dest);
        zip(dir, outputStream);
    }
}

执行main函数跑测试用例,发现程序将dir路径下的所有文件已经压缩并输出zip包。文章来源地址https://www.toymoban.com/news/detail-809349.html

到了这里,关于Java利用Apache compress包实现文件夹压缩成Zip包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 如何用java给一个文件夹打成压缩包?

    上面的程序可以将 folderPath 指向的文件夹中所有文件和子文件夹打包成 zipFilePath 所指向的压缩文件。您只需要将文件夹路径和压缩文件路径替换为实际的值,然后在 Java 环境下运行该程序即可。 请注意,上面的代码块中的 PackageName 是您自己所定义的包名。如果没有将此类文

    2024年02月10日
    浏览(45)
  • 麒麟V10服务器 安装samba 软件,并且实现远程连接,安装samba服务共享文件夹(压缩包形式)

    百度网盘 以下是在Linux系统中使用压缩包方式安装Samba服务的步骤: 首先,您需要下载Samba软件包。您可以从Samba官方网站(https://www.samba.org/)下载最新版本的Samba软件包。 1 上传 压缩包到服务器 以上就已经安装完成samba 软件,并且已经启动,那么如何使用 比如现在有两个服

    2024年02月01日
    浏览(75)
  • 【linux】tar指令压缩解压缩文件夹、文件命令详解

    压缩当前目录下文件夹/文件test到test.tar.gz: 解压缩当前目录下的file.tar.gz到file: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 -z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输

    2024年02月16日
    浏览(65)
  • 简单的文件夹压缩ZIP文件

    所用到的公共类 完结!撒花!

    2024年02月10日
    浏览(44)
  • Zip压缩文件夹 + 前端导出

    2024年03月21日
    浏览(50)
  • php压缩一个文件夹,php下载多个图片

    把 100/ 这个文件夹,压缩成 一百.zip 然后得到zip所在的下载url 这个功能,需要PHP去掉禁用函数 shell_exec  

    2024年02月11日
    浏览(55)
  • [python]批量解压文件夹下所有压缩包(rar、zip、7z)

            在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。Franpper今天给大家带来递归遍历指定路径下的所有文件和文件夹,批量解压所有压缩包的方法,帮大家一键解压。         常见的压缩包格

    2024年02月09日
    浏览(60)
  • .git文件夹信息泄露漏洞利用

    未经授权请勿利用文章中的技术 资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果 和损失,均由使用者本人负责。 无意中使用x-ray被动扫描,扫描出了一个git文件信息泄露。 通过手动验证确实可以下载到.git配置文件(.git文件夹是来自于

    2024年02月15日
    浏览(50)
  • Windows环境下通过 系统定时 执行脚本方式 压缩并备份文件夹 到其他数据盘

    压缩时需要使用7-zip进行调用,因此根据自己电脑进行安装 官网:https://www.7-zip.org/ 新建记事本文件,重命名为git_back_up.bat 注意:如果不设置可能会导致定时任务无法执行 开“控制面板-管理工具-本地安全策略”,选择“安全设置-本地策略-安全选项”,在右边列表中找到“

    2024年02月14日
    浏览(56)
  • linux 压缩webfile文件夹 webfile.tar.gz和webfile.tar的区别

    在Linux中,你可以使用tar命令来压缩文件夹。以下是将文件夹压缩为名为\\\"webfile.tar\\\"的示例命令: 上述命令中,-c选项表示创建新的压缩文件,-v选项表示在压缩过程中显示详细信息,-f选项指定要创建的压缩文件的名称。webfile/是要压缩的文件夹的路径。 如果你希望压缩后的文

    2024年02月09日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包