0

我得到了一个受密码保护的 zip 存档,

我需要编写一段代码,将存档解密为 abyte []而无需将中间结果保存到文件系统,

到目前为止,我发现标准的 java JDK 不允许执行这样的操作,

还有一个库Zip4j,但它似乎不允许直接解密文件,byte[]而是将结果写入文件系统,

如果真的真的很感激任何帮助,

谢谢

4

1 回答 1

2

你可以用 zip4j 做到这一点。这是文档中的一个示例:

import net.lingala.zip4j.io.inputstream.ZipInputStream;
import net.lingala.zip4j.model.LocalFileHeader;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class ZipInputStreamExample {

  public void extractWithZipInputStream(File zipFile, char[] password) throws IOException {
    LocalFileHeader localFileHeader;
    int readLen;
    byte[] readBuffer = new byte[4096];

    try (ZipInputStream zipInputStream = new ZipInputStream(fileInputStream, password)) {
      while ((localFileHeader = zipInputStream.getNextEntry()) != null) {
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
          while ((readLen = zipInputStream.read(readBuffer)) != -1) {
            outputStream.write(readBuffer, 0, readLen);
          }
        }
      }
    }
  }
}

然后,您可以outputStream.toByteArray()在每个条目上执行以获取 zip 中该条目的字节内容。

于 2020-05-22T15:58:14.280 回答