Tomcatログファイルを読み取る必要があり、しばらくすると(たとえば、1時間)ファイルを再度読み取ります(新しく追加されたコンテンツの場合のみ)。そこで、RandomAccessFileを作成して、最後に完了した位置を記録し、使用します。 BufferedReader.readLine()メソッド。
しかし、ファイルの行全体を読み取れない場合があります。
たとえば、Tomcatは次のコンテンツを書き込もうとしています(単なる例)。
192.168.0.0 localhost/index.html....。
そしてこの瞬間、私が読んだときに私は結果を得るかもしれません:
192.168.0 0 localhost/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();
しかし、それは機能しません。
何か案が?