使用Zip4j对目录压缩成zip文件并添加密码和使用密码解压zip文件

JDK自带的java.util.zip 包中的 ZipInputStream 不直接支持密码保护的 ZIP 文件。你可以使用第三方库来处理带密码的 ZIP 文件,常用的库是Zip4j。

引入Zip4j依赖

Zip4j 是一个功能强大的库,支持处理加密的 ZIP 文件。首先,你需要将 Zip4j 库添加到你的项目中。假设你在使用Maven,可以在 pom.xml 文件中添加以下依赖:

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

使用 Zip4j 解压带密码的 ZIP 文件

以下是一个使用 Zip4j 解压带密码的 ZIP 文件的示例代码:

/**
 * 使用给定密码解压 ZIP 文件
 *
 * @param zipFilePath ZIP 文件路径
 * @param destDirectory 解压目标目录
 * @param password ZIP 文件密码
 * @throws IOException
 */
public static void unzipWithPassword(String zipFilePath, String destDirectory, String password) throws  IOException {
        File destDir = new File(destDirectory);
        if (!destDir.exists()) {
            destDir.mkdir();
        }
        ZipFile zipFile = new ZipFile(zipFilePath);
        if (zipFile.isEncrypted()) {
            if(StringUtils.isNotBlank(password)){
                zipFile.setPassword(password.toCharArray());
            }else{
                throw new ZipException("Zip file is encrypted, but no password was given.");
            }
        }
        zipFile.extractAll(destDirectory);
    }

使用 Zip4j 来压缩目录

以下是一个示例代码,展示了如何使用 Zip4j 来压缩目录,并选择性地设置密码保护:

	/**
     * 压缩文件夹
     * @param sourceDirectoryPath 需要压缩的目录路径
     * @param zipFilePath 生成的 ZIP 文件路径
     * @param password 可选的密码,用于加密 ZIP 文件
     * @throws ZipException
     */
    public static void compressDirectory(String sourceDirectoryPath, String zipFilePath, String password) throws ZipException {
        ZipFile zipFile = new ZipFile(zipFilePath);

        // 设置压缩参数
        ZipParameters zipParameters = new ZipParameters();
        zipParameters.setCompressionLevel(CompressionLevel.FASTEST); // 设置压缩级别
        zipParameters.setIncludeRootFolder(false); // 不包括根目录

        if (StringUtils.isNotBlank(password)) {
            zipParameters.setEncryptFiles(true); // 启用文件加密
            zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); //设置加密方法
            zipFile.setPassword(password.toCharArray()); // 设置密码
        }
        File sourceDir = new File(sourceDirectoryPath);
        zipFile.addFolder(sourceDir, zipParameters);
    }
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值