尝试拖拽/解析一些日志文件。条目以日期开头,然后可以跨越多行。
这样可行,但始终没有看到要提交的新条目。
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 ");
}
}
答案 0 :(得分:1)
我猜测Scanner正在解析缓存的bis
,但缓冲区永远不会刷新。您可能依赖BufferedInputStream或Scanner来继续从流中读取字节,但我认为您必须自己这样做。
来自Javadocs:
BufferedInputStream添加 另一个输入的功能 流 - 即缓冲能力 输入并支持标记和 重置方法。当。。。的时候 创建了BufferedInputStream,一个 内部缓冲区数组已创建。如 读取或来自流的字节 跳过,内部缓冲区是 根据需要重新填写 包含输入流,多个字节位于 一时间标记操作记得a 指向输入流和 reset操作会导致所有字节 从最近的标记开始阅读 在新的之前重新阅读的操作 字节取自包含的 输入流。