[英]Java Scanner won't follow file
試圖拖尾/解析一些日志文件。 條目以日期開頭,然后可以跨越多行。
這有效,但是沒有看到要提交的新條目。
File inputFile = new File("C:/test.txt");
InputStream is = new FileInputStream(inputFile);
InputStream bis = new BufferedInputStream(is);
//bis.skip(inputFile.length());
Scanner src = new Scanner(bis);
src.useDelimiter("\n2010-05-01 ");
while (true) {
while(src.hasNext()){
System.out.println("[ " + src.next() + " ]");
}
}
看起來不像Scanner的next()或hasNext()檢測到新的文件條目。
任何想法我還能實現,基本上,一個帶有自定義分隔符的tail -f。
好的 - 使用凱利的建議我正在檢查和刷新掃描儀,這是有效的。 謝謝 !!
如果有人有改進建議PLZ嗎!
File inputFile = new File("C:/test.txt");
InputStream is = new FileInputStream(inputFile);
InputStream bis = new BufferedInputStream(is);
//bis.skip(inputFile.length());
Scanner src = new Scanner(bis);
src.useDelimiter("\n2010-05-01 ");
while (true) {
while(src.hasNext()){
System.out.println("[ " + src.next() + " ]");
}
Thread.sleep(50);
if(bis.available() > 0){
src = new Scanner(bis);
src.useDelimiter("\n2010-05-01 ");
}
}
我猜測Scanner正在解析被緩沖的bis
,但緩沖區永遠不會刷新。 您可能依賴BufferedInputStream或Scanner來繼續從流中讀取字節,但我認為您必須自己這樣做。
來自Javadocs:
BufferedInputStream將功能添加到另一個輸入流 - 即緩沖輸入並支持標記和重置方法的功能。 創建BufferedInputStream時,會創建一個內部緩沖區數組。 當讀取或跳過來自流的字節時,內部緩沖區根據需要從包含的輸入流中重新填充,一次多個字節。 標記操作記住輸入流中的一個點,並且重置操作使得從最近的標記操作開始讀取的所有字節在從包含的輸入流中獲取新字節之前被重新讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.