如何直接将XML文件写入zip压缩文件?

问题描述:

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

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

+0

为什么要使用JAXB编写XML文件?你为什么不直接将它复制到压缩文件中 –

+0

压缩文件更多的是压缩一切而不是压缩它。虽然它的真正处理文件的编辑器需要一个解决方案,它允许我在编辑器之外更改文件以进行快速更改。 – kdgwill

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

我不知道JAXB和任何东西有什么关系,XML文件内容也不是文件内容。你的问题真的是“我怎样才能直接输出字符到一个zip档案”

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

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

,而无需使用第三方库—是使用java.util.zip.ZipOutputStream的“正确”的方式—。

个人而言,我更喜欢TrueZip

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

+0

+1相同的答案+ TrueZip提示:) – Bohemian