【问题标题】:How can I write my exported XML to an XML File?如何将导出的 XML 写入 XML 文件?
【发布时间】:2022-01-05 15:19:27
【问题描述】:

我的工作是在 WikiBooks 上搜索一本书并导出相应的 XML 文件。该文件应稍后编辑。但是,错误发生得更早。 我的想法是读取页面并将其逐行写入 XML 文件。这是我的代码:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Welches Buch wollen Sie suchen?");
    book = (reader.readLine());
    book = replaceSpace(book);

    URL url = new URL("https://de.wikibooks.org/wiki/Spezial:Exportieren/" + book);
    URLConnection uc = url.openConnection();
    uc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0");
    uc.connect();

    BufferedReader xmlReader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
    File file = new File("wiki.xml");
    FileWriter writer = new FileWriter(file);
    String inputLine;
    while ((inputLine = xmlReader.readLine()) != null) {
        writer.write(inputLine + "\n");
    }
    xmlReader.close();

代码执行时没有错误消息,但保存的文件以单词中间结尾,因此不完整。 我该如何解决这个问题?

【问题讨论】:

  • 首先:您获得二进制数据,但将其转换为字符串(读取器)并返回,这是不必要的,并且可能是问题的根源(但可能不是您遇到的具体问题)。尽量避免使用String/char[]/Reader 和Writer,因为您所做的只是将数据从A 转移到B。使用byte[]/InputStream/OutputStream 和可能的ByteBuffer。第二:你永远不会关闭FileWriter,这可能是问题的原因。

标签: java xml


【解决方案1】:

正如评论所暗示的,问题在于流的内容没有刷新到文件中。如果您在 writer 上调用 close(),内容会自动刷新到文件中。

这是您的代码,最后添加了语句:

BufferedReader xmlReader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
File file = new File("wiki.xml");
FileWriter writer = new FileWriter(file);

String inputLine;
while ((inputLine = xmlReader.readLine()) != null) {
    writer.write(inputLine + "\n");

}
writer.close();
xmlReader.close();

Java 内置的一个更简单的解决方案是使用Files 类。我的建议是你用下面的简单语句替换上面的代码,它直接将你的InputStream 存储到一个文件中并自动处理流。

Files.copy(uc.getInputStream(), Paths.get("wiki.xml"), StandardCopyOption.REPLACE_EXISTING);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2013-05-08
    • 2018-07-26
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多