在不使用第三方库的情况下,使用JAXB将XML文件列表直接写入zip存档的正确方法是什么。
将所有XML文件写入目录然后压缩是否会更好?
答案 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的一部分(即它不是“库”)