Java Scanner不会关注文件

时间:2010-05-03 15:51:43

标签: java io java.util.scanner tail

尝试拖拽/解析一些日志文件。条目以日期开头,然后可以跨越多行。

这样可行,但始终没有看到要提交的新条目。

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。


好的 - 使用凯利的建议我正在检查&刷新扫描仪,这是有效的。谢谢!!

如果有人有改进建议,请拨打!

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 ");
    }
}

1 个答案:

答案 0 :(得分:1)

我猜测Scanner正在解析缓存的bis,但缓冲区永远不会刷新。您可能依赖BufferedInputStream或Scanner来继续从流中读取字节,但我认为您必须自己这样做。

来自Javadocs:

  

BufferedInputStream添加   另一个输入的功能   流 - 即缓冲能力   输入并支持标记和   重置方法。当。。。的时候   创建了BufferedInputStream,一个   内部缓冲区数组已创建。如   读取或来自流的字节   跳过,内部缓冲区是   根据需要重新填写   包含输入流,多个字节位于   一时间标记操作记得a   指向输入流和   reset操作会导致所有字节   从最近的标记开始阅读   在新的之前重新阅读的操作   字节取自包含的   输入流。