在Java 8中以UTF-8编码漂亮地打印和写入XML。
在Java 8中以UTF-8编码漂亮地打印和写入XML。
我有一个XML文档的字符串,希望将其格式化(标签后换行和缩进)到文件中,目前在https://stackoverflow.com/a/25865324/3229995中的解决方案基本符合我的要求。
问题是,它使用了System.out,我想将输出写入文件,并确保保留UTF-8编码。
以下是我修改后的代码。它在一个测试XML字符串上运行并输出一个XML文件,如https://stackoverflow.com/a/25865324/3229995中所示。
我的问题是:
我需要刷新或关闭writer或out吗?
如果需要,在代码的哪个部分?
我担心如果没有刷新或关闭,可能会出现部分XML未输出的情况。
public static void main(String[] args) { String xmlString = ""; DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document = documentBuilder.parse(new InputSource(new StringReader(xmlString))); // NEW: 使用FileOutputStream和Writer OutputStream out = new FileOutputStream("/path/to/output.xml"); Writer writer = new OutputStreamWriter(out, "UTF-8"); pretty(document, writer, 2); // NEW: 关闭writer和out writer.close(); out.close(); } private static void pretty(Document document, Writer writer, int indent) throws Exception { document.setXmlStandalone(true); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); if (indent > 0) { transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", Integer.toString(indent)); } // NEW: 传递writer Result result = new StreamResult(writer); Source source = new DOMSource(document); transformer.transform(source, result); } ME
在Java 8中,如何以UTF-8编码的格式进行漂亮的打印和写入XML?这个问题的出现原因是,开发者想要在Java中漂亮地打印和写入XML,并确保使用UTF-8编码。下面是问题的解决方法。
问题的解决方法是使用try-with-resources语句,并在使用完资源后关闭它们。这可以通过以下代码实现:
try (OutputStream out = new FileOutputStream("/path/to/output.xml"); Writer writer = new OutputStreamWriter(out, "UTF-8")) { pretty(document, writer, 2); }
这段代码首先创建一个输出流`out`,指向要写入的XML文件的路径。然后,创建一个使用UTF-8编码的字符输出流`writer`,将其与输出流`out`关联起来。接下来,调用`pretty`方法,将XML文档和字符输出流传递给它,同时指定缩进级别为2。最后,在try-with-resources语句的结束处,自动关闭字符输出流`writer`和输出流`out`。
关于代码中的`pretty`方法,这里没有给出具体实现。但是,它的作用是将XML文档格式化为漂亮的形式,并将其写入字符输出流。在这个问题中,重点是如何正确地使用字符输出流。
对于问题中提到的`StreamResult(writer)`和`transformer.transform(source, result)`,我们可以将它们理解为将XML文档写入字符输出流的过程。具体来说,`StreamResult(writer)`创建一个用于将XML文档写入字符输出流的`StreamResult`对象。然后,`transformer.transform(source, result)`将XML文档转换为字符输出流,并写入该流。所以,在调用`pretty`方法之后,我们可以安全地关闭字符输出流。
总之,问题的解决方法是使用try-with-resources语句,在使用完字符输出流后关闭它。这样做是为了确保资源被正确释放,并且能够以UTF-8编码格式漂亮地打印和写入XML。