Java IO implementation of unix/linux "tail -f" a un problème similaire; mais la solution n'est pas viable pour les fichiers journaux qui génèrent environ 50-100 lignes par seconde.Java - RandomAccessFile (Émulation de la fonction queue de Linux)
J'ai un algorithme qui émule la fonctionnalité queue dans Linux. Par exemple,
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
}
Mon problème est quand: « quelque chose a été ajouté au fichier » (se référant à la déclaration else if()).
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();
}
Les blocs de programme à tout ((CurLine = raf.readLine()) .... après 15 secondes de l'exécution (Note:. Que le programme fonctionne bien pour les 15 premières secondes)
Il semble que raf.readLine() est jamais frapper NULL, parce que je crois que ce fichier journal est écrit si vite que nous entrons dans un « chat sans fin et de la souris » boucle.
Quelle est la meilleure façon d'imiter La queue de Linux?
Merci Kevin! Pouvez-vous clarifier ce que "EDT" signifie sur votre dernier paragraphe? –
Thread Event Dispatch - un rapide google sur cette phrase vous donnera ce que vous devez savoir. Long et court: il est invalide de faire des changements d'état aux composants Swing sauf si vous le faites depuis l'EDT. –