2012-10-11 28 views
0

我有一个不断被另一个应用程序修改的xml日志;但是我的Java代码同时运行并检查了几个字符串。我正在使用SAX解析器。现在我的问题是每次循环访问文件时都必须有一个FileInputStream的新实例?解析器如何?如果文件不断更改,是否必须创建fileinputstream的新实例?

所以我们说:

while(notfound) 
{ 
    FileInputStream fis = new FileInputStream(new File("c:/tmp/123.xml")); 
    SaxParser.parse(fis, sampleHandler); 
    notFound = sampleHandler.checkIfFound(); 
} 

感谢:d

回答

1

在您所提供的例子,你需要你要开始从文件的开头读入一个新FileInputStream各一次。 Stream类别通常不允许手动定位/重置“位置”,因为名称('流')暗示,它只是一个管道,其中有一些位置喷出。

由于您正在使用SaxParser.parse()类方法来初始化分析,因此似乎并不像您实际上有重新创建的分析器对象。所以你应该很好,只需重新创建FileInputStream

但是!这似乎是SaxParser类支持在File实例传递作为第一个参数的当前版本,所以你可以重复使用:

while(notfound) 
{ 
    SaxParser.parse(new File("c:/tmp/123.xml"), sampleHandler); 
    notFound = sampleHandler.checkIfFound(); 
} 

避免再创造的FileInputStream干脆的,并允许解析器来处理那。

+0

啊我明白了。想通。嗯,让我试试看。非常感谢。 – jlisam13

相关问题