Мне нужно прочитать файл журнала tomcat, и через некоторое время (например, через час) я снова прочитаю файл (только для нового добавленного содержимого), поэтому я создаю файл 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();
Но это не работает ..
ЛЮБАЯ идея?