Lesen Sie externe log-Datei ohne das erstellen von Datei-lock
Zu Lesen versucht, eine log-Datei line-by-line (in Java). Diese log-Datei geschrieben werden, werden gleichzeitig von einem anderen Prozess (nicht-java-Programm).
Habe ich 2 Ansätze -
- BufferedReader (BufferedReader br = new BufferedReader(new FileReader(logFile));)
- RandomAccessFile (RandomAccessFile accessFile = new RandomAccessFile(logFile.getAbsolutePath(), "r");)
Tun, diese beiden Ansätze führen, dass die Datei gesperrt werden, bis ich rufen Sie die 'close' - Methode auf die BufferedReader/RandomAccessFile-Objekt ?
Gibt es andere Wege (Java) zum Lesen einer Datei in einer Weise, dass die Datei ist nicht gesperrt/gesperrt ist für andere Prozesse/Programme ?
PS - in allen meinen Recherchen bin ich auf mehrere Antworten/Lösungen (alt und neu) zu diesem problem. Ich möchte nur eine Klarstellung bitten/- Schließung über dieses Thema.
- (knappe, aber vielleicht nützlich) stackoverflow.com/questions/2537306/... , (auch Verwandte) stackoverflow.com/questions/1073274/...
- ja sah, dass. dass die post wirft gute Möglichkeiten, aber keine endgültigen Antworten. plus, seine 2 Jahre alt. vielleicht java-7 hat etwas neues ?
- Finden Sie diese Antwort stackoverflow.com/a/53424839/4090550
Du musst angemeldet sein, um einen Kommentar abzugeben.
BufferedReader ist vorzuziehen RandomAccessFile auf performance-Gründe, aber keiner von Ihnen wird die Datei sperren, wenn das Betriebssystem freundlich bedeutet also für Sie, in diesem Fall schließen Sie die Datei freigegeben wird.
Jedoch kann das Betriebssystem auch gefälligst verhindern, dass Sie das Lesen der Datei, wenn jemand anderes schreiben.
Lesen einer sequenziellen Datei, während ein anderer Prozess darauf zu schreiben ist nicht gutes design. Sie sollten nicht wirklich das Lesen von log-Dateien an. Log-Dateien sind für den Menschen. Sie sollte mit einer Datenbank.
Werfen Sie einen Blick auf diese: Java: öffnen und Lesen von einer Datei, ohne das es gesperrt wird
Wenn der nicht-Java-Prozess hat eine exklusive Sperre auf die Datei, wenn Sie schreiben, kein anderer Prozess kann in der Lage sein, es zu Lesen. Natürlich kann das auch etwas variieren mit dem Betriebssystem. Möchten Sie vielleicht zu schauen, was das Betriebssystem sagt über die lock-Datei, wenn die nicht-Java-Prozess ausgeführt wird.
Wenn eine shared-Sperre verfügbar ist, dann ist java.nio kann ermöglichen mehr Kontrolle über das locking-Verhalten: http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html