小编典典

在写入文件时读取文件

java

我必须阅读tomcat日志文件,并在一段时间(例如:一个小时)后再次读取该文件(仅针对新添加的内容),因此我创建了RandomAccessFile来记录我完成的最后一个位置并使用BufferedReader.readLine()方法。

但是,我发现有时我无法读取文件的整行。

例如,tomcat正在尝试编写以下内容(仅作为示例):

192.168.0.0本地主机/index.html .....

现在,当我阅读时,我可能会得到结果:

192.168.0 0 localhost /index.html .....

要么

192.168.0.0本地主机/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();

但这是行不通的。

任何想法?


阅读 287

收藏
2020-11-26

共1个答案

小编典典

readLine使用换行符。您不能使用它来确定是否有完整的行。您需要一次读取一个字节,然后自己解析该行。

同样,当您获得有效线时,您也不会继续前进。

2020-11-26