我正在写一个工具在DOCX文件中做一些小文本替换,这是一种压缩格式。我的方法是使用ZipOutputStream
将ZipEntry
内容从原始文件的条目复制到修改后的文件中。对于大多数DOCX文件来说,这种方式效果很好,但偶尔我会遇到ZipException
,这是因为我写的内容与ZipEntry
中包含的元信息(通常是压缩大小的差异)之间的差异。将ZipEntry复制到新的ZipFile中的惯用方法是什么?
这里是我用来复制内容的代码。为了简洁,我已经删除了错误处理和文档处理。到目前为止,我还没有遇到关于文档条目的问题。
ZipFile original = new ZipFile(INPUT_FILENAME);
ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(OUTPUT_FILE));
Enumeration entries = original.entries();
byte[] buffer = new byte[512];
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry)entries.nextElement();
if ("word/document.xml".equalsIgnoreCase(entry.getName())) {
//perform special processing
}
else{
outputStream.putNextEntry(entry);
InputStream in = original.getInputStream(entry);
while (0 < in.available()){
int read = in.read(buffer);
outputStream.write(buffer,0,read);
}
in.close();
}
outputStream.closeEntry();
}
outputStream.close();
什么是直接复制从一个ZipFile
到另一个ZipEntry
对象正确的或惯用的方法是什么?
我已经标记了我的解决方法,因为似乎没有更好的答案。 – Keeblebrox 2012-08-14 14:45:53