我正在编写一个工具来在 DOCX 文件中进行一些小的文本替换,这是一种压缩格式。我的方法是ZipEntry
使用ZipOutputStream
. 对于大多数 DOCX 文件,这工作得很好,但偶尔我会遇到ZipException
关于我编写的内容与包含在其中的元信息之间的差异ZipEntry
(通常是压缩大小的差异)。
这是我用来复制内容的代码。为简洁起见,我去掉了错误处理和文档处理;到目前为止,我还没有遇到文档条目的问题。
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();
ZipEntry
将对象从一个对象直接复制ZipFile
到另一个对象的正确或惯用方法是什么?