2017-03-09 63 views
0

我有一个日志文本文件,由若干个标签,如下列:解析文本文件标记为XML - Java的

<log level="info" id="12144" ....> <msg> test msg </msg> </log> 

我要分析此文件,因此我认为,因为它看起来像XML我可以将xml(<?xml version="1.0"?>)和一个根(<file>)标记添加到文件中,然后使用DOM解析器对其进行解析。

但目前,我面临的问题是在文件的开头添加文本,因为所有可用的选项都要覆盖,或者将原始文件复制到临时位置,然后添加目标文本适用于我,因为我正在处理大于100 MB的文件。

I use the below code to try to add the text at the beginning, and I tried several solutions or classes other than RandomAccessFile 

RandomAccessFile RAF = new RandomAccessFile(file, "rw"); 
     RAF.getChannel().position(0); 

     RAF.write(("<?xml version=\"1.0\" encoding=\"UTF-8\"?> \r\n <file> \r\n").getBytes()); 

     RAF.close(); 

您是否有任何建议在开始时添加文本或解析文本文件,并提取元素?

感谢,

+0

显示您的代码。 – VHS

回答

0

你就不能获取的文件StringStream或任何的内容,然后你的东西添加到开始?之后,你仍然可以解析文档String/Stream任何

+0

文件非常大,并且为了添加内容而添加字符串,不适合内存,因为我正在处理Web服务,所以我们可能在某个时刻处理几个文件。这就是为什么我从我的解决方案中排除这个选项。 –

1

如果你知道条目的精确模式和如果这种模式不会再改变它的相对容易使用正则表达式来提取项目,如:

"<log *level=\"([^\"]*)\" *id=\"([^\"])\" *> ..." 
+0

不错的建议@maraca,我会试试。 –

+0

我对这个建议非常小心,因为通常正则表达式不适合xml/html,并经常提到这个着名的答案:http://stackoverflow.com/a/1732454/4785110 – maraca