簡體   English   中英

如何創建帶有密碼保護的 7z 文件?

[英]How to create 7z file with Password protection?

我能夠創建一個 7z 文件,但想使用密碼創建文件,我嘗試使用設置壓縮方法,但沒有設置密鑰的選項,請幫助我如何創建受密碼保護的 7Z 文件Java。

    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。

https://commons.apache.org/proper/commons-compress/limitations.html

我已經整理了您的代碼,添加了 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!! */);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM