You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Java中使用7zip对加密文件进行带密码保护的压缩

使用7-Zip(Java)实现带密码保护的文件压缩

你的现有代码仅能完成基础的7z格式压缩,缺少密码保护的核心逻辑,这就是无法实现加密压缩的原因。以下是修正后的完整代码,同时优化了流资源管理:

import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public int zipSingleFileWithPassword(String compressedOutputPath, File sourceFile, char[] password) throws IOException {
    // 使用try-with-resources自动管理流资源,避免泄漏
    try (SevenZOutputFile out = new SevenZOutputFile(new File(compressedOutputPath));
         FileInputStream in = new FileInputStream(sourceFile)) {
        
        // 设置压缩密码
        out.setPassword(password);
        
        // 创建归档条目,指定压缩后文件名
        SevenZArchiveEntry entry = out.createArchiveEntry(sourceFile, sourceFile.getName());
        out.putArchiveEntry(entry);
        
        // 读写文件内容
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = in.read(buffer)) != -1) {
            out.write(buffer, 0, bytesRead);
        }
        
        out.closeArchiveEntry();
        return 0;
    } catch (IOException e) {
        // 建议用error级别记录异常,info级别不足以体现错误严重性
        logger.error("加密压缩文件失败: {}", e.getMessage(), e);
        return 1;
    }
}

关键修改说明

  • 添加密码设置:通过out.setPassword(password)为压缩包设置密码,参数建议用字符数组(用完可手动清零,比字符串更安全)
  • 优化流管理:使用try-with-resources语法,自动关闭SevenZOutputFile和FileInputStream,避免手动关闭遗漏导致的资源泄漏
  • 修正参数逻辑:原代码中compressedDo1FilePath作为条目名称不合理,改为源文件名更符合预期;同时将输出文件路径单独传入,避免混淆源文件和输出文件

依赖说明

确保你的项目引入了Apache Commons Compress库(SevenZ相关类来自该库),Maven依赖示例:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.24.0</version>
</dependency>

注意事项

  • 生成的是加密的7z格式文件,需用支持7z加密的工具(如官方7-Zip软件)解压
  • 密码字符数组使用后可手动清零(Arrays.fill(password, '\0')),避免明文留在内存中
  • 异常处理时优先记录完整堆栈信息,便于排查问题

内容的提问来源于stack exchange,提问作者Thejus32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:36:14