我必须阅读tomcat日志文件,并在一段时间(例如:一个小时)后再次读取该文件(仅针对新添加的内容),因此我创建了RandomAccessFile来记录我完成的最后一个位置并使用BufferedReader.readLine()方法。
但是,我发现有时我无法读取文件的整行。
例如,tomcat正在尝试编写以下内容(仅作为示例):
192.168.0.0本地主机/index.html .....
现在,当我阅读时,我可能会得到结果:
192.168.0 0 localhost /index.html .....
要么
就是说,如果正在写这行,我的读者读到的行不完整。
因此,我想知道是否有什么想法可以确定正在读取的行是否已完成?
这是核心代码:
raf = new RandomAccessFile(file, "r"); raf.seek(pos); while ((line = raf.readLine()) != null) { System.out.println(line); } pos = raf.getFilePointer(); raf.close();
我已经尝试过这个(添加条件):
raf = new RandomAccessFile(file, "r"); raf.seek(pos); while ((line = raf.readLine()) != null) { if(line.chartAt(line.length()-1)=='\n'){ System.out.println(line); } else raf.seek(pos); //roll back to the last position } pos = raf.getFilePointer(); raf.close();
但这是行不通的。
任何想法?
readLine使用换行符。您不能使用它来确定是否有完整的行。您需要一次读取一个字节,然后自己解析该行。
同样,当您获得有效线时,您也不会继续前进。