Как записать 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 (т. е. это не "библиотека")