有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的半密码保护Zip文件

我需要使用Java创建一个zip文件。图书馆并不重要,但zip4j似乎是一个好的图书馆。在此zip文件中,只有部分文件或子目录受密码保护。例如,在以下zip文件中,只有以“*”开头的文件才受密码保护:

foo.zip
 foo1.txt
 *secure
  *secure1.txt
  *secure2.txt

有没有办法用Java实现这个场景

先谢谢你


共 (2) 个答案

  1. # 1 楼答案

    此mavne依赖项:

            <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);
                    }
                }
    
  2. # 2 楼答案

    总之,我是用zip4j找到的。以下代码段可用于创建密码保护和非密码保护的文件

    对于要进行密码保护的文件:

            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);