0

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

所以让我们说:

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

感谢:D

4

1 回答 1

1

在您提供的示例中,每次您想从文件开头开始读取时需要一个新的。类通常不允许手动定位/重置“位置”,正如名称(“流”)所暗示的那样,它只是一个喷出比特的管道。FileInputStreamStream

由于您使用SaxParser.parse()类方法来启动解析,因此您似乎实际上没有要重新创建的解析器对象。因此,您只需重新创建FileInputStream.

但!似乎当前版本的SaxParser类支持将File实例作为第一个参数传递,因此您可以重复使用:

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

避免完全重新创建FileInputStream,并允许解析器处理它。

于 2012-10-11T00:46:04.383 回答