我需要创建一个 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/