У меня есть следующий метод добавления zip-записей в ZipOutputStream:
private void addFile(String filename, byte[] bytes, ZipOutputStream zos, boolean encrypt) throws IOException {
ZipEntry entry = new ZipEntry(filename);
if (encrypt) {
entry.setMethod(ZipEntry.DEFLATED);
} else {
entry.setMethod(ZipEntry.STORED);
CRC32 crc32 = new CRC32();
crc32.update(bytes);
entry.setCrc(crc32.getValue());
entry.setSize(bytes.length);
entry.setCompressedSize(bytes.length);
}
zos.putNextEntry(entry);
zos.write(bytes);
zos.flush();
zos.closeEntry();
}
... и я использую его, открывая новый ZipOutputStream (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(new File(path))));
), устанавливая для его метода значение DEFLATED (zos.setMethod(ZipOutputStream.DEFLATED);
), а затем вызывая следующие файлы (по порядку):
- "mimetype" (для этого файла я установил для метода ZipEntry значение STORED)
- «manifest.xml» в подпапке «META-INF» (META-INF/manifest.xml)
- "контент.xml"
- "стили.xml"
- "meta.xml"
- "thumbnail.png" во вложенной папке "Thumbnails" ("Thumbnails/thumbnail.png")
- "настройки.xml"
... наконец, я вызываю метод закрытия для ZipOutputStream (zos.close();
).
Если я попытаюсь открыть его напрямую с помощью OpenOffice, он спросит меня, какой файл я пытаюсь открыть, скажет, что файл поврежден, и, наконец, откроет файл... но если я разархивирую файл (я с помощью winrar), а затем я снова заархивирую с помощью того же инструмента (я имею в виду winrar) без каких-либо изменений, OpenOffice может без проблем открыть документ...
Любая помощь? Заранее спасибо!