2010-05-03 43 views
6

尝试尾部/解析某些日志文件。条目以日期开始,然后可以跨越多行。Java扫描程序不会遵循文件

这可以工作,但不会看到新的条目要归档。

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()检测到新的条目要归档。

任何想法,我可以实现,基本上,尾巴-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 "); 
    } 
} 
+0

它现在做了什么,它会抛出一个异常或挂在一个无限循环而不检测新数据? – 2010-05-03 16:07:57

+0

无限循环未检测到新数据。尝试了一堆方法,测试hasNext()1st,缓冲/无缓冲。 – 2010-05-03 16:11:40

回答

1

我猜想,扫描仪在解析bis被缓冲,但缓冲区永远不会得到刷新。您可能依靠BufferedInputStream或扫描器来从流中读取字节,但我认为您必须自己做。

从Javadoc中:

甲BufferedInputStream为添加了 向另一个输入 流 - 即,能够将缓冲 输入和支持mark和 复位方法。当创建了 BufferedInputStream时,会创建一个 内部缓冲区阵列。由于 字节被读取或 跳过,内部缓冲区是 根据需要从包含输入流的 重新填充,许多字节在 一次。标记操作的输入流中记得有一个 点和 复位操作导致,因为最新的标记 操作中读取的所有字节 从包含的 输入流采取新 字节之前重读。

+0

同意。修改后的更新。谢谢! – 2010-05-03 16:44:05