Как записать XML-файлы непосредственно в zip-архив?

каков правильный способ записи списка XML-файлов с помощью JAXB непосредственно в zip-архив без использования сторонней библиотеки.

было бы лучше просто записать все XML-файлы в каталог, а затем zip?

3 ответов


как отметили другие, вы можете использовать ZipOutputStream класс для создания ZIP-файла. Трюк, чтобы поместить несколько файлов в один ZIP-файл, заключается в использовании ZipEntry дескрипторы до записи (маршалинга) XML-данных JAXB в ZipOutputStream. Таким образом, ваш код может выглядеть примерно так:


JAXBElement jaxbElement1 = objectFactory.createRoot(rootType);
JAXBElement jaxbElement2 = objectFactory.createRoot(rootType);

ZipOutputStream zos = null; 
try {
  zos = new ZipOutputStream(new FileOutputStream("xml-file.zip"));
  // add zip-entry descriptor
  ZipEntry ze1 = new ZipEntry("xml-file-1.xml");
  zos.putNextEntry(ze1);
  // add zip-entry data
  marshaller.marshal(jaxbElement1, zos);
  ZipEntry ze2 = new ZipEntry("xml-file-2.xml");
  zos.putNextEntry(ze2);
  marshaller.marshal(jaxbElement2, zos);
  zos.flush();
} finally {
  if (zos != null) {
    zos.close();
  }
}

"правильным" способом-без использования сторонней библиотеки - было бы использовать java.util.zip.ZipOutputStream.

лично я предпочитаю TrueZip.

TrueZIP-это платформа плагинов на основе Java для виртуальных файловых систем (VFS), которая обеспечивает прозрачный доступ к архивным файлам, как если бы они были просто каталогами.


Я не знаю, что JAXB имеет отношение к чему - либо, а содержимое XML-файла-это содержимое файла. Ваш вопрос действительно "как я могу выводить символы непосредственно в zip-архив"

для этого откройте ZipOututStream и используйте API для создания записей, а затем записывайте содержимое в каждую запись. Помните, что zip-архив похож на серию именованных файлов в архиве.

кстати, ZipOututStream является частью JDK (т. е. это не "библиотека")