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

作者:指北君 时间:2022-12-07 12:26:46 

依赖

让我们先把 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一行是可选的。我们可以从FASTESTULTRA级别中选择(默认是NORMAL)。

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

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

为了解决这个问题,我们必须确保该文件是手动创建并放置在项目文件夹中,或者我们必须从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);

创建一个分割的压缩文件

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

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
int splitLength = 1024 * 1024 * 10; //10MB
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");

来源:https://mp.weixin.qq.com/s/wKmCRaHFtT53McEyoU6wnw

标签:Java,加密,解密,zip
0
投稿

猜你喜欢

  • SpringCloud Gateway使用详解

    2023-11-27 02:54:36
  • Java 中 hashCode() 与 equals() 的关系(面试)

    2023-08-29 18:03:57
  • Java实现XML文件学生通讯录

    2023-07-23 19:21:49
  • 详解Android获取设备唯一ID的几种方式

    2022-07-15 12:33:41
  • Android自定义UI手势密码终结版

    2021-07-29 15:40:17
  • Android 微信摇一摇功能实现详细介绍

    2023-06-21 21:00:09
  • C#实现简单计算器功能

    2023-02-13 19:26:44
  • C#生成随机数功能示例

    2022-03-25 04:52:40
  • Android仿iphone自定义滚动选择器

    2023-06-24 12:47:59
  • java实现简易的学籍管理系统

    2023-07-21 07:47:26
  • Android实现打开各种文件的intent方法小结

    2022-03-12 18:39:20
  • 一篇文章带你入门Java Script

    2023-09-12 06:09:24
  • MyEclipse2017创建Spring项目的方法

    2023-01-02 17:00:25
  • JAVA读取文件流,设置浏览器下载或直接预览操作

    2023-10-06 09:20:59
  • Java汉字转拼音工具类完整代码实例

    2021-07-09 21:32:18
  • SpringMVC Restful风格与中文乱码问题解决方案介绍

    2021-06-12 03:15:16
  • Kotlin 高阶函数与Lambda表达式示例详解

    2021-06-18 08:58:15
  • Android实现读取NFC卡卡号示例

    2021-08-06 21:08:39
  • Java之SpringBoot自定义配置与整合Druid

    2022-09-28 06:23:06
  • SpringBoot 开发提速神器 Lombok+MybatisPlus+SwaggerUI

    2022-07-08 07:40:23
  • asp之家 软件编程 m.aspxhome.com