我需要使用Java创建一个zip文件。图书馆并不重要,但zip4j似乎是一个很好的。在此zip文件中,只有部分文件或子目录受密码保护。例如,在以下zip文件中,只有以“*”开头的文件才会受密码保护:
foo.zip
foo1.txt
*secure
*secure1.txt
*secure2.txt
有没有办法在Java中实现这个场景?
提前致谢...
答案 0 :(得分:1)
这种严重依赖:
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.6.1</version>
</dependency>
代码:
ZipParameters parameters = new ZipParameters();
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD);
ZipFile zip = new ZipFile(destFile, PASSWORD.toCharArray());
zip.setCharset(InternalZipConstants.CHARSET_UTF_8);
for (File file : srcFiles) {
if (file.isFile()) {
zip.addFile(file, parameters);
} else {
zip.addFolder(file, parameters);
}
}
答案 1 :(得分:0)
无论如何,我通过使用zip4j找到了它。 Fwollowing snippets可用于创建受密码保护和非密码保护的文件。
对于要受密码保护的文件:
ZipFile zipFile = new ZipFile(zipFileName);
ZipParameters zipParameters = new ZipParameters();
zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
zipParameters.setEncryptFiles(true);
zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
zipParameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
zipParameters.setPassword(password);
zipFile.addFiles(new ArrayList<>(filesToZip), zipParameters);
以及未受密码保护的文件:
ZipFile zipFile = new ZipFile(zipFileName);
ZipParameters zipParameters = new ZipParameters();
zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
zipFile.addFiles(new ArrayList<>(filesToZip), zipParameters);