我已经看过并阅读了一些关于读取和写入文件txt的指南,但在我的项目中有一些小问题,例如我的文件超过200MB(是一个xml文件);无论如何我想读我的文件,代码的一部分是这样的:
node id =“1653281475”lat =“44.499773”lon =“11.350111”version =“1”
timestamp =“2012-02-29T20:15:15Z”changeset =“10831749”uid =“91650”user =“Alberto58”>
tag k="barrier" v="gate"/>
tag k="bicycle" v="yes"/>
tag k="foot" v="yes"/>
tag k="car" v="yes"/>
节点/ 其他节点: node id =“16532843433”等..........
我想仅搜索节点ID“1653281475”并仅将标签k =“foot”v =“yes”修改为k =“foot”v =“no”,该节点包含在此节点中。
我怎么做?
这是我尝试阅读和编写我的xml文档的第二天(现在我使用的是一个小的654byte xml)employees.xml,我已经按照这么多指南但我不明白我该怎么做例如,我遵循本指南:
http://www.journaldev.com/1198/java-sax-parser-example-tutorial-to-parse-xml-to-list-of-objects
所以我创建了3个位于目录名sax中的java文件:Employee.java,MyHandler.java,XMLParserSAX.java(在女巫中有一些错误,代码与我链接的页面相同)
当我使用命令时(我在Ubuntu 12.04中)javac sax / *没有问题 但是当我使用java sax.XMLParserSAX employees.xml时有很多问题;首先在代码中“import com.journaldev.xml.Employee;” - >无法找到符号。 另一个错误是相同的,但在其他地方,如“MyHandler handler = new MyHandler();” ...
我认为问题在于XMLPArserSAX无法识别类Employee ... 我该怎么办? =(
答案 0 :(得分:4)
不要将整个文件加载到内存中。 SAX解析器就是为了这种用法而制作的。使用SAX解析器读取文件。当您阅读每个标记时,请将其写入输出文件 - 直到您看到node id="1653281475"
。当您看到此节点时,请对其进行修改并将其写入输出文件。然后继续将节点写入输出文件直到结束。输出文件将在此过程结束时包含修改后的XML。
答案 1 :(得分:0)
要处理大部分数据,我们必须使用面向事件的解决方案。使用SAX或StAX API,并在从输入文件中读取后立即将元素/属性写入输出文件。这将在内存分配和处理时间方面为您提供更好的性能。