java - 将字节数组写入 ZipArchiveOutputStream

标签 java zip apache-commons-compress

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

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

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

谢谢!

最佳答案

以下方法将一个 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();       
   }

这是否解决了您的问题?

关于java - 将字节数组写入 ZipArchiveOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18671225/

相关文章:

可以列出 zip/rar 文件内容的 PHP 库

file - python wordnetlemmatizer : not a zip file

用于嵌套 ZIP 文件处理的 Java 实用程序库

java - select 中不区分大小写的 JPA 性能

java - Liferay:获取所有可用的网站语言

java - 是否可以设置 Launch4J,使其创建的 exe 文件在右键单击/打开时无法通过 zip/egg/rar 文件显示其内容?

java - 使用Spring jdbcTemplate时如何检查列名是否存在?

java - 为什么 StringUtils.join 不能接受 StringCharacterIterator?

java - 7-zip 存档内的文件列表需要几秒钟才能完成