打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何在Java中加密和解密zip文件?
userphoto

2022.10.01 江苏

关注
脚本之家
,与百万开发者在一起

来源丨Java技术指北(ID:javanorth)

已获得原公众号授权转载

在本文中,我们来学习如何用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一行是可选的。我们可以从FASTESTULTRA级别中选择(默认是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);

创建一个分割的压缩文件

我们可以通过使用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');

总结

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

<END>

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# .NET 使用第三方类库DotNetZip解压/压缩Zip文件 (ZT)
Java压缩解压ZIP之Zip4j
ASP.Net MVC
Python zipfile模块 - 代码分享 - 开源中国社区
zipfile.BadZipFile: File is not a zip file
通杀各种压缩包密码 - Advanced Archive Password Recovery
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服