将字节数组写入ZipArchiveOutputStream

bz3*_*z3x 1 java zip apache-commons-compress

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

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

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

谢谢!

roe*_*ijn 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();       
   }
Run Code Online (Sandbox Code Playgroud)

这会解决您的问题吗?