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

时间:2011-08-20 03:25:04

标签: java xml jaxb zip

在不使用第三方库的情况下,使用JAXB将XML文件列表直接写入zip存档的正确方法是什么。

将所有XML文件写入目录然后压缩是否会更好?

3 个答案:

答案 0 :(得分:11)

正如其他人所指出的,您可以使用ZipOutputStream类来创建ZIP文件。将多个文件放在一个ZIP文件中的技巧是在ZipEntry中编写(编组)JAXB XML数据之前使用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();
  }
}

答案 1 :(得分:3)

“正确”方式 - 不使用第三方库 - 将使用java.util.zip.ZipOutputStream

但就个人而言,我更喜欢TrueZip

  

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

答案 2 :(得分:1)

我不知道JAXB与任何事情有什么关系,XML文件内容也不是文件内容。您的问题实际上是“如何将字符直接输出到zip存档”

为此,请打开ZipOututStream并使用API​​创建条目,然后将内容写入每个条目。请记住,zip存档就像存档中的一系列命名文件。

btw,ZipOututStream是JDK的一部分(即它不是“库”)