我有Document
(w3c.dom.Document) - Document[] arrayOfDocuments;
数组,我需要将此数组转换为File
- File[] arrayOfFiles;
的数组,然后我将制作来自此zip
的{{1}}文件。
我不知道将arrayOfFiles
转换为Document
是否很热,有可能不保存到硬盘?怎么样?
感谢您的帮助。
编辑:我想要制作xml文档的File
文件。
答案 0 :(得分:2)
您可以使用名为ZipOutputStream
的类将文件压缩为输出流。这是一个例子:
public static void write(OutputStream zipout, Document... docs)
throws IOException {
try (final ZipOutputStream zip = new ZipOutputStream(zipout)) {
for (final Document doc : docs) {
final ZipEntry entry = new ZipEntry(doc.getDocumentURI()); // The name
zip.putNextEntry(entry);
write(doc, zip);
zip.closeEntry();
}
}
}
public static void write(Document doc, OutputStream out) {
try {
final TransformerFactory tf = TransformerFactory.newInstance();
final Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.transform(
new DOMSource(doc),
new StreamResult(new OutputStreamWriter(out, "UTF-8"))
);
} catch (final IllegalArgumentException
| TransformerException
| TransformerFactoryConfigurationError
| UnsupportedEncodingException ex) {
throw new RuntimeException(ex);
}
}
zipout
可以是任何输出流,例如,使用Files.newOutputStream(path)
创建的文件流或套接字。如果您不想,则无需将任何内容保存到磁盘。
请注意,每个zip条目都需要一个名称。在这种情况下,我使用doc.getDocumentURI()
命名条目。您可能希望将其更改为其他内容,具体取决于您要归档的文档类型。