Java IO implementation of unix/linux "tail -f" имеет аналогичную проблему; но решение не является жизнеспособным для файлов журналов, которые генерируют около 50-100 строк в секунду.Java - RandomAccessFile (эмуляция функции хвоста Linux)
У меня есть алгоритм, который эмулирует функциональность хвоста в Linux. Например,
File _logFile = new File("/tmp/myFile.txt");
long _filePtr = _logFile.length();
while (true)
{
long length = _logFile.length();
if (length < _filePtr)
{
// means file was truncated
}
else if (length > _filePtr)
{
// means something was added to the file
}
// we ignore len = _filePtr ... nothing was written to file
}
Моя проблема в том, когда: «что-то добавить в файл» (со ссылкой на заявление еще если()).
else if (length > _filePtr)
{
RandomAccessFile _raf = new RandomAccessFile(_logFile, "r");
raf.seek(_filePtr);
while ((curLine = raf.readLine()) != null)
myTextPane.append(curLine);
_filePtr = raf.getFilePointer();
raf.close();
}
программные блоки в то время как ((CurLine = raf.readLine()) .... через 15 секунд во время выполнения (Примечание:. Что программа работает прямо в течение первых 15 секунд)
оказывается, что raf.readLine() никогда не бил NULL, потому что я считаю этот файл журнала записывается так быстро, что мы идем в «бесконечный кошки и мыши» петли.
что это лучший способ для подражания Linux хвост?
Благодаря Кевин! Можете ли вы уточнить, что означает «EDT» в вашем последнем абзаце? –
Event Dispatch Thread - быстрый ответ на эту фразу даст вам то, что вам нужно знать. Длинные и короткие: недопустимо вносить изменения состояния в компоненты Swing, если вы не делаете это из EDT. –