如何将w3c.dom.Document转换为File而不保存到文件

时间:2017-03-10 17:29:05

标签: java file document

我有Document(w3c.dom.Document) - Document[] arrayOfDocuments;数组,我需要将此数组转换为File - File[] arrayOfFiles;的数组,然后我将制作来自此zip的{​​{1}}文件。

我不知道将arrayOfFiles转换为Document是否很热,有可能不保存到硬盘?怎么样?

感谢您的帮助。

编辑:我想要制作xml文档的File文件。

1 个答案:

答案 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()命名条目。您可能希望将其更改为其他内容,具体取决于您要归档的文档类型。