【问题标题】:How to write a parsed XML file into another file in Java [closed]如何将解析的 XML 文件写入 Java 中的另一个文件 [关闭]
【发布时间】:2013-12-29 09:34:56
【问题描述】:

我正在使用 Java 中的 SAX Parser 解析一个 1.2 GB 的 XML 文件。 Console 中的结果不完整。我想要做的是将解析的 XML 文件写入另一个文件。这是我使用 SAX 解析 XML 文件的代码:

public class Parser extends DefaultHandler
{

public void startDocument()
{
System.out.println("Begin parsing the document .. ");
}

public void endDocument()
{
System.out.println("End parsing document ..");
}

public void startElement(String namespaceURI, String localName,String rawName, Attributes atts) throws SAXException 
{
System.out.print("<" + rawName + ">");
}

public void endElement(String namespaceURI, String localName, String rawName) throws SAXException 
 {
System.out.print("</" + rawName + ">");
 }

public void characters(char[] ch, int start, int length) throws SAXException 
 {
for (int i=0; i<(start + length); i++)
{
    System.out.print(ch[i]);
}
}
}

这里是main 方法:

public static void main(String[] args ) throws IOException, SAXException
{
XMLReader p = XMLReaderFactory.createXMLReader();
p.setContentHandler(new Parser());
p.parse("dblp.xml");
}

我想至少将此 XML 文件的所有内容写入一个文本文件。我也在考虑将内容写入另一个 XML 文件。任何人都可以帮我编写 XML 文件内容。我以某种方式尝试了以下代码:

FileWriter fstream = new FileWriter("out.txt"); 
BufferedWriter out = new BufferedWriter(fstream);

【问题讨论】:

  • 请解释一下当你尝试你的代码时发生了什么。从您的问题中不清楚您面临什么问题。包含代码示例时也请使用一致的缩进,否则它们更难以阅读。
  • 代码正在解析 XML 文件。例如,我需要的只是将解析的输出写入另一个文本文件。
  • 您在问题中说“我已尝试使用以下代码”。我想问你尝试的时候发生了什么?如果您有一些损坏的代码需要我们帮助修复,或者您是否希望有人会为您编写该代码,我会感到困惑。如果您在回复中包含@Duncan,我会收到您的回复通知。
  • 当我运行代码时,输​​出显示在控制台中。我不知道如何将这些输出写入文本文件。它不应该被打破。我只是用一个小 XML 文件对其进行了测试。解析的输出显示在 Eclipse 的 Console 中。
  • 您正在寻找的是将控制台输出放入文件中,因为您的解析器正在将所有内容写入控制台

标签: java xml file-io sax


【解决方案1】:

将您对 System.out.print 的调用替换为对 fstream.write 的调用 - 有些调用略有不同,请阅读 Javadoc。

但是,我想知道如果您只是尝试复制文件,为什么要解析文件?如果您的唯一目标是顶部复制它,只需打开一个输入流,读取一个数据缓冲区并将其写入您的输出流,循环直到您点击 eof。

【讨论】:

  • 非常感谢您。基本上,我无法打开文件并且无法理解为什么。我相信 fstream.write 可以解决问题。
【解决方案2】:

您需要通过这样做将控制台输出重定向到文件:

PrintStream out = new PrintStream(new FileOutputStream("out.txt"));
System.setOut(out);

编辑:直接写入 fstream 的另一个答案可能更好。

【讨论】:

  • 非常感谢您。我现在就试一试。
猜你喜欢
  • 2015-05-14
  • 2012-08-26
  • 2011-07-21
  • 2017-12-13
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多