我正在使用 Apache Commons Compress 来压缩文件。 如何为存档添加密码?
public static void main(String args[]) throws FileNotFoundException, IOException {
SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File("outFile.7z"));
File entryFile = new File("D:/image.jpg");
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.close();
}
恐怕不支持压缩。您可能想使用这个 JNI 包装器。
如果你这样做,你可能会失去平台独立性。 (他们说它是跨平台的,但我不会打赌)
我认为您不能使用 Commons compress。来自 Apache Commons 压缩站点的 examples 部分:
我们目前仅提供对 lzma、arj、dump 和 Z.arj 的读取支持 只能读取未压缩的存档,7z可以读取有很多压缩包的存档 7z 支持但 不支持的压缩和加密算法 写入档案时支持加密。
自从 commons-compress 库于 2023 年发布版本 1.23 以来,SevenZOutputFile 类的构造函数接受 password 作为第二个参数(即 https://commons.apache.org/proper/commons-compress) /examples.html#Encrypted_7z_Archives ).
char[] password = "my strong password".toCharArray();
File outputFile = new File("/tmp/7zipOutputWithPassword.7z");
SevenZOutputFile sevenZOutputFile = new SevenZOutputFile(outputFile, password);