我需要创建一个zip文件,并且受以下条件的限制:
这些条目以byte [](或ByteArrayOutputStream)的形式出现,而不是以File的形式出现。
条目的文件名可以是非ascii / UTF-8。
JDK 1.6或更早版本
由于java.util.zip仅支持JDK 1.7及更高版本中的UTF-8文件名,因此使用commons-compress ZipArchiveOutputStream似乎更好。但是,如何基于字节数组或ByteArrayOutputStream而不是File创建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();
}
这样可以解决您的问题吗?