1

我需要创建一个 zip 文件并受到以下条件的限制:

  • 这些条目以 byte[](或 ByteArrayOutputStream)的形式出现,而不是 File。
  • 条目的文件名可以是非 ascii/UTF-8。
  • JDK 1.6 或更早版本

由于 java.util.zip 仅支持 JDK 1.7 及更高版本的 UTF-8 文件名,因此使用 commons-compress ZipArchiveOutputStream 似乎更好。但是如何基于字节数组或 ByteArrayOutputStream 而不是 File 创建 ZipEntryArchive?

谢谢!

4

1 回答 1

8

以下方法将 byte[] 作为输入,生成 zip 并将其内容作为另一个 byte[] 返回。一切都在记忆中完成。磁盘上没有 IO 操作。我剥离了异常处理以获得更好的概述。

    byte[] zip(byte[] data, String filename) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ZipArchiveOutputStream zos = new ZipArchiveOutputStream(bos);

        ZipArchiveEntry entry = new ZipArchiveEntry(filename);
        entry.setSize(data.length);
        zos.putArchiveEntry(entry);
        zos.write(data);
        zos.closeArchiveEntry();

        zos.close();
        bos.close();

        return bos.toByteArray();       
   }

这能解决你的问题吗?

于 2013-09-07T10:02:04.243 回答