2012-10-11 26 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

相關問題