我如何直接将XML文件写入zip归档文件?

9

如何使用JAXB将XML文件列表直接写入zip归档文件而不使用第三方库?

是将所有XML文件直接写入目录,然后压缩更好呢?


为什么要使用JAXB编写XML文件?为什么不直接将它复制到zip中呢? - Matt Ball
Zip更多地用于归档而不是压缩。虽然编辑器真正处理文件,但我需要一种解决方案,允许我在编辑器之外修改文件以进行快速修改。 - kdgwill
3个回答

11

正如其他人指出的那样,您可以使用ZipOutputStream类来创建ZIP文件。将多个文件放入单个ZIP文件的技巧是在写入(编组)JAXB XML数据到ZipOutputStream之前使用ZipEntry描述符。因此,您的代码可能类似于以下代码:


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();
  }
}

3
“正规”的方式——不使用第三方库——应该是使用 java.util.zip.ZipOutputStream
个人而言,我更喜欢使用TrueZip

TrueZIP 是一个基于 Java 的插件框架,用于虚拟文件系统(VFS),它提供了透明访问存档文件的功能,就像它们只是普通目录一样。


2
我不知道JAXB和XML有什么关系,文件内容就是文件内容。你的问题实际上是“如何将字符直接输出到zip归档文件中”。
为此, 打开一个ZipOututStream并使用API创建条目,然后将内容写入每个条目。请记住,zip存档文件就像存档中的一系列命名文件。
顺便说一下,ZipOututStream是JDK的一部分(即它不是“库”)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接