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包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见排序算法及其稳定性分析

前言&#xff1a; 排序算法可以说是每一个程序员在学习数据结构和算法时必须要掌握的知识点&#xff0c;同样也是面试过程中可能会遇到的问题&#xff0c;在早些年甚至还会考冒泡排序。由此可见呢&#xff0c;掌握一些常见的排序算法是一个程序员的基本素养。虽然现在的语言标…

2024 年 Linux 和开源的六大趋势预测

文章地址&#xff1a;观点|2024 年 Linux 和开源的六大趋势预测 让我们尝试预测未来吧&#xff01; 新的一年快乐&#xff0c;朋友们 ✨ 2024 年的钟声已经敲过&#xff0c;我们有必要去预见一下将塑造本年度的各种潮流。 我们不能预见未来&#xff0c;所以无法精确预知将会发…

libzmq使用zmq_poller就出现 was not declared in this scope

问题描述: 最近在使用zmq的 pub/sup模型的时候,使用zmq_poller就出现 was not declared in this scope 问题分析 关于这个问题,见zmq.h 619行左右: 619: #ifdef ZMQ_BUILD_DRAFT_API poller相关的api接口都在里面,如果这里没有定义ZMQ_BUILD_DRAFT_API宏,poller相关的API是无…

k8s的node亲和性和pod亲和性和反亲和性 污点 cordon drain

node亲和性和pod亲和性和反亲和性 污点 cordon drain 集群调度: schedule的调度算法 预算策略 过滤出合适的节点 优先策略 选择部署的节点 nodeName:硬匹配&#xff0c;不走调度策略&#xff0c;node01 nodeSelector:根据节点的标签选择&#xff0c;会走调度的算法 只…

PSoc62™开发板之PWM呼吸灯

实验目的 利用PWM动态调节输出功率达到控制LED呼吸变化的效果 实验准备 PSoc62™开发板&#xff08;开发板已经板载LED&#xff09; 板载资源 板载有多少pwm 创建工程例程&#xff0c;在libraries/HAL_Drivers/drv_pwm.h中查看BSP支持的pwm数量及对应的GPIO&#xff0c;可…

pgsql中epoch用法

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 昨天又被叫回来加班,説是数据问题,又回来加班搞,到了以后发现数据没问题,那就是查询接口的事了,写查询接口的人用时间戳去查询,明明直接可以直接用日期查询,非得改成时间戳查询,结果还是有问题,接下来复盘一下…

【华为OD】系统需要提供人民币(CNY)、美元(USD)、英镑(GBP)、港币(HKD)价值 转换功能。

题目描述: 系统需要提供人民币(CNY)、美元(USD)、英镑(GBP)、港币(HKD)价值 转换功能。为了简单处理,题目的说明和考生调试可以用下面的默认汇 率:2 3 1 CNY = 2 HKD 1 USD = 8 CNY 1 GBP = 2 USD请按照汇率实现货

「 网络安全术语解读 」内容安全策略CSP详解

引言&#xff1a;什么是CSP&#xff0c;它为什么可以防御一些常见的网络攻击&#xff0c;比如XSS攻击&#xff0c;具体原理是什么&#xff1f;以及如何绕过CSP&#xff1f; 1. CSP定义 CSP&#xff08;Content Security Policy&#xff0c;内容安全策略&#xff09;是一种网络…

LeetCode 32. 最长有效括号

最长有效括号 给你一个只包含 ‘(’ 和 ‘)’ 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 方法一、栈 由于要存在配对&#xff0c;必然有)存在&#xff0c;配对的长度为上一个)到当前)之间的距离&#xff0c;即为最长配对子串&…

centos安装gradle

1.将gradle.zip拷到centos 解压 2.配置环境变量 vim /etc/profile 在最后添加 export GRADLE_HOME/zx/gradle-8.5 export PATH$PATH:$GRADLE_HOME/bin:${PATH} 之后source /etc/profile gradle -version 安装成功

RK3566环境搭建

环境&#xff1a;vmware16&#xff0c;ubuntu 18.04 获取SDK前需要安装 sudo apt update sudo apt install -y repo git python 下载完成后先验证一下MD5码 md5sum rk356x_linux_release_v1.3.0b_20221213_split_dir/*firefly_split* 解压 rk3566ubuntu:/path/to$ mkdir ~…

【7-zip密码】7-Zip如何取消文件加密的密码

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确的密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

Linux网络命令

文章目录 Linux网络网络配置命令1、ifconfig&#xff1a;查看网络接口信息&#xff08;显示所有活动网卡&#xff09;1.1 常用命令格式1.2 命令格式&#xff08;图文详解&#xff09;1.2.1 临时修改网卡名称1.2.2 永久修改网卡名称1.2.3 永久修改单个网卡 2、hostname&#xff…

JAVA面向对象基础-容器

一、泛型 我们可以在类的声明处增加泛型列表&#xff0c;如&#xff1a;<T,E,V>。 此处&#xff0c;字符可以是任何标识符&#xff0c;一般采用这3个字母。 【示例9-1】泛型类的声明 1 2 3 4 5 6 7 8 9 10 class MyCollection<E> {// E:表示泛型; Object[] o…

ESP32_ADC(Arduino)

ADC模数转换 ESP32集成了12位的逐次逼近式ADC&#xff0c;分别为ADC1模块ADC2模块&#xff0c;共支持18个模拟输入通道: ADC1模块&#xff1a;8个通道&#xff0c;32~39ADC2模块&#xff1a;10个通道&#xff0c;0&#xff0c;2&#xff0c;4&#xff0c;12 ~ 15&#xff0c;…

调试器加载错误,从任务栏打开可能会导致该问题 2024/1/8

&#x1f9e7;喜欢将常用软件固定在任务栏的用户肯定很苦恼这个问题 &#x1f9e7;问题复现 &#x1f9e7;这里先查找一下原因 &#x1f9e7;查看一下固定在任务栏的微信小程序开发工具的属性 如果不会打开任务栏图标属性界面的小伙伴请先翻到文章最后 &#x1f9e7;再使用同样…

HJ2 计算某字符出现次数

题目描述&#xff1a; 写出一个程序&#xff0c;接受一个由字母、数字和空格组成的字符串&#xff0c;和一个字符&#xff0c;然后输出输入字符串中该字符的出现次数。&#xff08;不区分大小写字母&#xff09; 数据范围&#xff1a; 1≤n≤1000 输入描述&#xff1a; 第一…

第十六章 正则的介绍和使用

文章目录 一、正则的概念和意义二、正则的创建三、正则的写四、正则的使用五、读正则六、练习 一、正则的概念和意义 正则&#xff1a;正确的规则&#xff0c;用来约束字符串的规则&#xff0c;正则的数据类型是对象&#xff0c;正则对象&#xff0c;正则表达式正则的意义&…

破解国企绩效管理中存在的三大难题

绩效管理是实现国企三项制度改革的重要保障&#xff0c;是实现员工个人绩效与企业整体效益不断提高的重要推手。国企现代化建设与高质量发展需要充分利用绩效管理的“指挥棒”作用&#xff0c;实现目标引领、问题导向、敏捷响应外部变化&#xff0c;从而激活组织&#xff0c;推…

CRM功能定制,哪些功能是需要格外注意的?

​到了2023年&#xff0c;在如今的商业环境中&#xff0c;千篇一律的方法很少能带来成功。这对于CRM管理系统尤其如此。虽然标准化的CRM解决方案为企业提供了一个简单的“入坑”门槛&#xff0c;但它们往往缺乏为企业带来真正竞争优势所需的灵活性&敏捷性。企业想要拥有适合…