0

我有一个带有多行的字符串,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<books>

    <book publishyear="1990">
        <name>Harry Potter</name>
    </book> 
</books>

如何将其写入文件?我尝试过使用缓冲写入器,但是它不会在多行中使用字符串。

 try{
           FileWriter fstream = new FileWriter("D:/temp.txt");
           BufferedWriter out = new BufferedWriter(fstream);
           out.write(" <?xml version="1.0" encoding="UTF-8"?>
<books>

    <book publishyear="1990">
        <name>Harry Potter</name>
    </book> 
</books>");

           out.close();
  }catch (Exception e){//Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
4

4 回答 4

5

永远不要手动编写 XML 文档。您将在文件编码中失败,您将在语法错误中失败。始终使用类似的 DOM 矿石。您的演示代码已经包含错误。

于 2013-02-18T09:45:55.333 回答
3

这与写入字符串或 BufferedWriter 无关。

Java 没有多行字符串,因此如果您希望它们在源代码中的多行上,则必须连接字符串。您还需要用转义的 \n 字符替换实际的换行符,并用 \" 转义 "

也就是说,你这样做:

String foo = "<?xml version="1.0" encoding=\"UTF-8\"?>\n"+
"<books>\n"+
"   <book publishyear=\"1990\">\n"+
"        <name>Harry Potter</name>\n"+
"    </book>\n"+
"</books>";

out.write(foo);

如果您愿意,您也可以在源代码的一行中编写所有这些内容:

out.write("<?xml version="1.0" encoding=\"UTF-8\"?>\n<books>\n ... etc.etc."));
于 2013-02-18T09:48:16.927 回答
0

您应该转义引号并使用提供 println 方法的 PrintWriter。

PrintWriter out = new PrintWriter(new BufferedWriter(fstream));

out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
out.println("<books>)";

或者,您可以将行终止符附加到您的字符串:

 out.write("<books>\r\n");
于 2013-02-18T09:51:26.123 回答
0

您绝对可以使用BufferedWriter
See below code 作为示例,结合您自己的逻辑(给出在文件写入中写入新行的示例)

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
writer.write("I am the first Line");
writer.newLine();
writer.write("I am in the second Line");

writer.close();  

您需要使用希望这有帮助的newLine()方法,BufferedWriter
并且您不必将代码更改为新的输出流:)

于 2013-02-18T10:49:41.873 回答