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

开发 前端
如果文件 "aFile.txt "在磁盘上不存在,该方法将抛出一个异常。net.lingala.zip4j.exception.ZipException File does not exist: …为了解决这个问题,我们必须确保该文件是手动创建并放置在项目文件夹中,或者我们必须从Java中创建它。

大家好,我是指北君。

在本文中,我们来学习如何用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中创建受密码保护的压缩文件并将其解压。

责任编辑:武晓燕 来源: Java技术指北
相关推荐

2021-02-01 08:00:00

vimLinux加密

2021-05-08 05:56:15

加密OpenSSL密钥

2017-02-08 21:20:24

LinuxUbuntu加密硬盘

2013-11-13 09:22:16

2015-08-05 09:40:26

2015-03-26 14:19:53

GPG加密解密

2021-07-18 11:43:58

Linux密码加密

2015-05-19 08:58:08

加密解密GnuPG

2024-03-01 09:58:44

2023-09-01 09:31:48

2020-12-13 17:57:16

加密密码Python

2021-05-08 00:00:27

JavaScript ZIP文件

2011-03-02 17:41:28

2011-03-18 09:48:32

2020-12-21 16:00:07

Pythonzip文件密码

2018-09-17 11:12:14

Linux文件管理器加密文件

2023-12-13 12:27:46

2019-10-17 17:15:01

Linux解压文件命令

2020-05-19 13:55:38

Python加密密码

2013-04-02 15:23:12

点赞
收藏

51CTO技术栈公众号