【问题标题】:How do I write XML files directly to a zip archive?如何将 XML 文件直接写入 zip 存档?
【发布时间】:2011-10-31 01:27:35
【问题描述】:

什么是使用 JAXB 直接将 XML 文件列表写入 zip 存档而不使用 3rd 方库的正确方法。

将所有 XML 文件写入一个目录然后压缩会更好吗?

【问题讨论】:

  • 为什么要使用 JAXB 编写 XML 文件?你为什么不直接把它复制到zip中
  • zip 更多的是用于归档所有内容,而不是压缩它。虽然它是真正处理文件的编辑器,但我需要一个解决方案,让我可以在编辑器之外更改文件以进行快速更改。

标签: java xml jaxb zip


【解决方案1】:

正如其他人指出的那样,您可以使用 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();
  }
}

【讨论】:

    【解决方案2】:

    “正确”的方式——不使用第 3 方库——是使用java.util.zip.ZipOutputStream。

    不过,我个人更喜欢TrueZip。

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

    【讨论】:

      【解决方案3】:

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

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

      顺便说一句,ZipOututStream 是 JDK 的一部分(即它不是“库”)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        相关资源
        最近更新 更多