Java 如何创建具有密码保护的7z文件?

Java 如何创建具有密码保护的7z文件?,java,zip,7zip,ziparchive,Java,Zip,7zip,Ziparchive,我可以创建一个7z文件,但想创建一个带有密码的文件,我尝试了设置压缩方法,但没有设置密钥的选项,请帮助我如何在Java中创建一个受密码保护的7z文件 public static void main(String args[]) throws FileNotFoundException, IOException { SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File("D:\\Test\\outFil

我可以创建一个7z文件,但想创建一个带有密码的文件,我尝试了设置压缩方法,但没有设置密钥的选项,请帮助我如何在Java中创建一个受密码保护的7z文件

    public static void main(String args[]) throws FileNotFoundException, IOException {
    SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File("D:\\Test\\outFile.7z"));
    File entryFile = new File("D:\\Test\\Test_20200210200232.dat");
    SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(entryFile, entryFile.getName());        
    sevenZOutput.putArchiveEntry(entry);        
    FileInputStream in = new FileInputStream(entryFile);
                    int len;
                    byte buffer[] = new byte[8192];
                    int transferedMegaBytes2=0;
                    while ((len = in.read(buffer)) > 0) {
                        sevenZOutput.write(buffer, 0, len);                    
                        transferredBytes += len;
                        int transferedMegaBytes = (int) (transferredBytes / 1048576);                          
                        if(transferedMegaBytes>transferedMegaBytes2){
                        System.out.println("Transferred: " + transferedMegaBytes + " Megabytes.");
                        transferedMegaBytes2=transferedMegaBytes;
                        }
                    }
    sevenZOutput.closeArchiveEntry();       
        sevenZOutput.setContentCompression(SevenZMethod.AES256SHA256);
    sevenZOutput.close();    
    }

Apache Commons Compress不支持使用密码创建7Z

我整理了您的代码,添加了try-with-resources并注释了几个问题区域:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZMethod;
import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;

public class Q66451111 {

    private static final int KB = 1024;
    private static final int MB = KB * KB;

    public static void main(final String[] args) throws IOException {

        final File entryFile = new File("D:\\Test\\Test_20200210200232.dat");
        final File new7Z     = new File("D:\\Test\\outFile.7z");

        try (   final InputStream      fin  = new     FileInputStream(entryFile);
                final InputStream      in   = new BufferedInputStream(fin);
                final SevenZOutputFile szof = new SevenZOutputFile   (new7Z) )
        {
            final SevenZArchiveEntry entry        = szof.createArchiveEntry(entryFile, entryFile.getName());
            szof.putArchiveEntry(entry);

            final byte buffer[] = new byte[8192];

            int     transferredBytes           = 0;
            int     transferredBytesSincePrint = 0;
            int     len;
            while ((len = in.read (buffer)) != -1 /* TODO Note: do NOT use '> 0' */) {
                szof.write(buffer, 0, len);

                transferredBytes           += len;
                transferredBytesSincePrint += len;

                if (transferredBytesSincePrint > MB) {
                    transferredBytesSincePrint = 0;

                    System.out.println("Transferring.: " + ((double) transferredBytes / MB) + " Megabytes.");
                }
            }
            System        .out.println("Transferred..: " + ((double) transferredBytes / MB) + " Megabytes.");

            szof.closeArchiveEntry();
            szof.setContentCompression(SevenZMethod.AES256SHA256 /* FIXME Unsupported 7z Method!! */);
        }
    }
}

这回答了你的问题吗?