如何在Java中加密和解密zip文件?

2023-05-16

在本文中,我们来学习如何用Zip4j库创建受密码保护的压缩文件并将其解压。

依赖

让我们先把 zip4j​ 依赖关系添加到我们的 pom.xml 文件中。


<dependency>
    <groupId>net.lingala.zip4j</groupId>
    <artifactId>zip4j</artifactId>
    <version>2.9.0</version>
</dependency>  

压缩一个文件

首先,我们将使用ZipFile addFile()​方法将一个名为aFile.txt​的文件压缩到一个名为compressed.zip的有密码保护的 zip 文件。


ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFile(new File("aFile.txt"), zipParameters);  

setCompressionLevel​一行是可选的。我们可以从FASTEST到ULTRA​级别中选择(默认是NORMAL)。

在这个例子中,我们使用了AES加密。如果我们想使用Zip标准加密,我们只需用ZIP_STANDARD​替换AES。

注意,如果文件 "aFile.txt "在磁盘上不存在,该方法将抛出一个异常。net.lingala.zip4j.exception.ZipException File does not exist: …

为了解决这个问题,我们必须确保该文件是手动创建并放置在项目文件夹中,或者我们必须从Java中创建它。


File fileToAdd = new File("aFile.txt");
if (!fileToAdd.exists()) {
    fileToAdd.createNewFile();
}  

另外,在我们完成了新的ZipFile之后,需要及时关闭资源:


zipFile.close();  

压缩多个文件

让我们修改一下代码,以便我们能够一次压缩多个文件。


ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);

List<File> filesToAdd = Arrays.asList(
  new File("aFile.txt"),
  new File("bFile.txt")
);

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFiles(filesToAdd, zipParameters);  

我们不使用addFile​方法,而是使用addFiles()​并传入一个List的文件。

压缩一个目录

我们可以简单地用addFolder​代替addFile方法来压缩一个文件夹。


ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFolder(new File("/users/folder_to_add"), zipParameters);  

创建一个分割的压缩文件

我们可以通过使用createSplitZipFile和createSplitZipFileFromFolder方法,``将压缩文件分割成几个文件。


ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
int splitLength = 1024 * 1024 * 10; 
zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength);  

zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength);  

splitLength的单位是字节。

提取所有文件

提取文件也同样简单。我们可以用extractAll()​方法从我们的compressed.zip中提取所有文件。


ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractAll("/destination_directory");  

提取单个文件

如果我们只想从compressed.zip​中提取一个文件,我们可以使用extractFile()方法。


ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractFile("aFile.txt", "/destination_directory");  

总结

综上所述,我们已经学会了如何用Zip4j库在Java中创建受密码保护的压缩文件并将其解压。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Java中加密和解密zip文件? 的相关文章

  • 虚拟机中Linux扩容硬盘空间

    在初始安装CentOS时 xff0c 只给了硬盘空间30GB xff0c 现在因为需要 xff0c 所以需要扩容 1 关闭虚拟机中的系统 xff0c 打开虚拟机的设置 xff0c 修改磁盘空间到合适的大小 xff0c 再重启系统 2 打开终
  • Vue3 - setup语法糖

    与setup函数不同的是 xff0c 在script标签中添加setup 1 变量 方法不需要 return 出来 属性和方法也不用返回 xff0c 也不用写setup函数 xff0c 也不用写export default xff0c 甚至
  • Autoware 安装(源码)过程 与 踩坑记录(Ubuntu18.04)

    目录 autoware 源码安装 安装 ROS Melodic xff1a 设置软件源 设置密钥 xff1a 安装ROS xff1a rosdep xff1a 安装rosinstall 添加ROS环境变量 配置ROS环境变量 创建工作目录
  • 读论文:Feedback Network for Image Super-Resolution

    源码 xff1a https github com Paper99 SRFBN CVPR19 1 介绍 xff08 1 xff09 基于深度学习的方法的优势主要来自其两个关键因素 xff1a 深度和跳跃链接 第一 xff0c 保留更多的上下
  • Kolla-ansible部署OpenStack Train实践

    Kolla ansible部署OpenStack Train实践 前言系统环境设置安装pip和docker安装ansible安装kolla ansible配置文件修改执行部署 登录openstack写在最后部署过程中遇到的问题总结 前言 最
  • Windows 7 如何升级 PowerShell

    操作环境 xff1a Windows 7 旗舰版 Service Pack 1 x64 PowerShell 2 0 gt PowerShell 4 0 解决过程 xff1a 1 下载Windows6 1 KB2819745 x64 Mul
  • 最简单的算法:线性查找法

    目录 写在前面 一 什么是算法 二 线性查找法 2 1 实现线性查找法 2 2 思维拓展 使用泛型 2 3 自定义类测试泛型方法 2 4 循环不变量 三 复杂度分析 3 1 复杂度分析简介 3 2 常见的算法复杂度 四 算法性能测试 写在前
  • Android仿抖音主页效果实现

    目录 写在前面 一 准备工作 1 1 主页面布局 1 2 列表Item布局 1 3 列表Item适配器 二 自定义LayoutManager 三 实现播放 补充 xff1a 源码地址 xff1a https github com JArch
  • 数据结构基础之动态数组

    目录 前言 1 Java中的数组 2 实现动态数组 2 1 基本类结构设计 2 2 添加元素 2 3 查询 amp 修改元素 2 4 包含 amp 搜索 amp 删除 2 5 数组扩容 前言 今天我们来学习一下关于数据结构的一些基础知识 x
  • 数据结构基础之栈和队列

    目录 前言 1 栈 2 队列 2 1 实现队列 2 2 循环队列 前言 上一篇中我们介绍了数据结构基础中的 动态数组 xff0c 本篇我们继续来学习两种基本的数据结构 栈和队列 1 栈 特点 xff1a 栈也是一种线性结构 xff0c 相比
  • 数据结构基础之链表

    目录 前言 1 什么是链表 2 添加元素 3 虚拟头结点 4 查询 amp 修改元素 5 删除元素 附 xff1a 完整代码 前言 又到周末了 xff0c 修整了一天 xff0c 继续来写点东西吧 xff0c 今天 xff0c 我们来学习数
  • Android开发之局部广播的使用——LocalBroadcast

    一直以来都想着写一篇关于四大组件的文章 xff0c 可是一直懒一直都没去写 xff0c 今天终于抱起了电脑来敲一篇 这篇文章是关于安卓四大组件之一的广播的使用 xff0c 网上关于这方面的文章也是相当多 xff0c 我这里根据我一年多的工作
  • 基于OkHttp3封装网络请求框架

    前言 网络请求可以说是开发一款移动APP最核心的基础功能了 xff0c 通过实际工作中以及浏览了许多网络框架之后 xff0c 本篇在这里分享慕课一位老师基于OkHttp封装的一个轻量的网络框架 xff0c 至于为什么说它轻量 xff0c 因
  • c语言实现冒泡排序

    include lt stdio h gt void bubbleSort int arr int n int i j temp for i 61 0 i lt n 1 i 43 43 for j 61 0 j lt n i 1 j 43
  • 快速解决:ViewPager+多Fragment切换出现空白页面的问题

    前言 前两天在做项目的过程中遇到一个问题 xff0c 以前没遇到过 xff0c 所以这里做个笔记记录下来 xff0c 也是分享给同样遇到这个问题还尚未解决的猿友们 问题描述 xff1a 项目的主页框架是采用Activity 43 Fragm
  • Retrofit2实现图片文字上传

    目录 前言 一 效果展示 二 基本配置 三 代码实战 3 1 创建RetrofitManager和APIService 3 2 准备好选择的图片 3 3 开始构造参数 3 4 实现上传 附 xff1a UploadHelper java源码
  • Android实现电话来电自动接听功能

    目录 前言 一 效果展示 二 实现分析 三 具体业务调整 四 总结 前言 关于手机来电自动接听这个需求公司领导提了有一段时间了 xff0c 直到最近才开始处理这个功能 拿到这个需求 xff0c 先分析了一下 xff0c 肯定是牵扯到硬件层和
  • 【Python】Windows系统下Spyder安装python第三方包的两种方法

    小白在学习python之初 xff0c 经常遇到要安装python第三方包的问题 xff0c 犹记得在安装xgboost时 xff0c 那是安装了一下午呀 xff0c 各种网上找教程 xff0c 后来小白总结了一下 xff0c 其实安装包无
  • 关于棋盘马走“日”字问题的回溯算法实现(分享以前做过的题)

    1 回溯法基本思想 回溯法是在包含问题的所有解得解空间树 或森林 中 xff0c 按照深度优先的策略 xff0c 从根结点出发搜索解空间树 算法搜索至解空间树的任一结点时 xff0c 总是先判断该结点是否满足问题的约束条件 如果满足进入该子
  • springboot中使用logback将日志写入到ELK平台

    ELK 是由elasticsearch logstash kibana 三个单词的首字母组成 elasticsearch xff1a 一款优秀的开源分布式搜索引擎框架 基于lucence logstash xff1a 开源的日志分析 过滤

随机推荐

  • xxl-job的http任务和command任务

    在官方提供的sample示例代码中 xff0c 还提供了两种特殊的bean类型的任务 http bean的名称为 xff1a httpJobHandler 和command xff08 bean的名称为 xff1a commandJobHa
  • activiti中的服务任务(ServiceTask)

    服务任务不同于用户任务 xff08 需人工处理 xff09 xff0c 服务任务一般是一段可自动执行的任务而无需人工干预 例如 xff1a 当用户完成 34 任务1 34 后 xff0c 想自动执行一个跑批任务处理后台数据库表的数据 xff
  • springcloud集成seata(AT)分布式事务

    目录 一 下载seata server和seata源码 二 配置启动seata 2 1 在nacos控制台 xff0c 新建一个seata的名称空间 xff0c 用于存放seata的专用配置 2 2 创建seata server的mysql
  • mybatis中插入和读取mysql的blob/text类型数据

    mysql中的blob xff0c mediumblob xff0c longblob 可以映射到mybatis中 的byte 类型 xff0c 需要mybatis的org apache ibatis type BlobTypeHandle
  • you-get使用二三谈 (亲测感想 )

    1 you get是什么 you get是Github上的一个项目 xff0c 源项目托管地址对其介绍如下 xff1a You Get is a tiny command line utility to download media con
  • typescript(四)--ts中类、对象、静态方法、继承

    如题 xff0c 本篇介绍下ts中类 对象 静态方法 继承 类中成员返回修饰符等 ts中类继承类似于传统面向对象编程语言中的继承体系 xff0c 使用extends关键字继承 xff0c 类中this表示此当前对象本身 xff0c supe
  • typescript(五)--ts中抽象类、继承、多态

    如题 xff0c 本篇我们介绍下ts中抽象类 继承 多态 ts中类抽象类 多态 xff1a 抽象类 abstract 修饰 xff0c 里面可以没有抽象方法 但有抽象方法 abstract method 的类必须声明为抽象类 abstrac
  • typescript(九)--ts中泛型、泛型方法、泛型类、泛型接口

    如题 xff0c 本篇我们介绍写ts中的泛型 什么是泛型呢 xff1f 我们可以理解为泛型就是在编译期间不确定方法的类型 广泛之意思 xff0c 在方法调用时 xff0c 由程序员指定泛型具体指向什么类型 泛型在传统面向对象编程语言中是极为
  • springboot中spring.profiles.include的妙用

    springboot中spring profiles include的妙用 我们有这样的一个springboot项目 项目分为开发 测试 生产三个不同阶段 环境 xff0c 每个阶段都会有db ftp redis等的不同配置信息 我们可以使
  • “联通”两字在windows平台下的乱码问题

    windows 平台下 xff1a 新建文本文档 输入 39 联通 39 ctrl 43 s保存 gt 退出记事本 再双击打开该文本 神奇的事情发生了 联通两个字变成黑点 xff01 原因 xff1a 保存和打开的时候没有指定统一的编码解码
  • Ant Design table 自动对齐表头

    在table的属性中加入 xff1a scroll 61 34 x 39 max content 39 34 即可不用设置列宽度 xff0c 自适应全表内容为一行显示 xff0c 自动对齐表头
  • Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了

    文章目录 背景代码替换设置阿里源 推荐这个 设置清华大学的 手动替换windows 替换Mac 替换 国内源列表 xff08 推荐用阿里云的 xff09 推荐阅读 背景 由于 python 自带的源下载速度非常慢 xff0c 特别是安装一些
  • Linux 休眠和挂起

    Linux休眠和挂起 xff08 2008新版 xff09 Linux2 6内核已经有了非常多的变化 xff0c 配置也要相应的改变 The only thing that not changes is Change xff1a xff09
  • 使用dpkg命令安装deb文件包

    1 使用dpkg命令进行安装 sudo dpkg i deb文件名 2 根据经验 xff0c 通常情况下会报依赖关系的错误 xff0c 我们可以使用以下的命令修复安装 sudo apt get install f 3 如果要卸载安装的应用我
  • UITableViewController (列表视图控制器)

    tableview里Cell的小对勾颜色改成别的颜色 xff1f mTableView tintColor 61 UIColor redColor 怎么在不新建一个Cell的情况下调整separaLine的位置 xff1f 一 myTabl
  • Python零代码小游戏 · FreeGames

    Python在日常的办公或者其他领域都有涉及 xff0c 如网站开发 数据分析 爬虫 可视化等等 我们其实还可以选择用Python开发小游戏 xff0c 回忆童年的美好时光 这次并非用PyGame制作的 xff0c 而是一个很有趣的库 Fr
  • Linux 系统使用 git 提交代码-- git 的安装及使用(简明教学指南)

    序 2023 02 09 晚 鉴于本篇文章收藏量比较多 xff0c 那就给大家分享点在实际工作中使用频率最高的工作流命令吧 场景如下 多人共同开发一个项目 xff1a 我叫小明 xff0c 参与了一个名为 chatGPT 的项目 xff0c
  • pyperclip 粘贴失效

    最近在pyautogui自动化输入时 xff0c 发现英文数字都可以 xff0c 中文比较麻烦 xff0c 而且还牵扯到输入法切换问题 xff0c pyautogui typewrite 这是相当于键盘输入 xff0c 如果现在是中文 xf
  • mac 安装问题汇总

    1 问题 xff1a 应用程序添加到登陆项后需要输入密码 xff0c 怎么才能不让它提示输入密码 xff0c 直接运行 xff1f 回答 xff1a 终端内输入 sudo s 输入密码 chown root Applications Gen
  • 如何在Java中加密和解密zip文件?

    在本文中 xff0c 我们来学习如何用Zip4j库创建受密码保护的压缩文件并将其解压 依赖 让我们先把 zip4j 依赖关系添加到我们的 pom xml 文件中 lt dependency gt lt groupId gt net ling