Java: Öffnen und Lesen von einer Datei, ohne sie zu sperren

9

Ich muss "tail -f" mit Java nachahmen können. Ich versuche, eine Protokolldatei zu lesen, da sie von einem anderen Prozess geschrieben wird. Wenn ich die Datei zum Lesen öffne, wird die Datei jedoch gesperrt und der andere Prozess kann nicht mehr darauf schreiben. Jede Hilfe würde sehr geschätzt werden!

Hier ist der Code, den ich momentan verwende:

%Vor%     
rogue780 29.03.2010, 10:52
quelle

4 Antworten

5

Der Aufbau des Tails ist aufgrund einiger spezieller Fälle wie Dateikürzung und (mittleres) Löschen schwierig. Um die Datei ohne Sperre zu öffnen, verwenden Sie StandardOpenOption.READ wie folgt mit der neuen Java-Datei-API:

%Vor%

Für meinen Versuch, einen Tail in Java zu erstellen, siehe:

  • Methode examineFile(…) in Ссылка
  • Das Obige wird von Ссылка um eine Tail-Operation zu erstellen. Der queue.feed(lineContent) übergibt den Zeileninhalt für die Verarbeitung durch Listener und entspricht Ihrem this.parse(…) .

Lassen Sie sich von diesem Code inspirieren oder kopieren Sie einfach die Teile, die Sie benötigen. Lassen Sie es mich wissen, wenn Sie Probleme finden, die mir nicht bekannt sind.

    
Augustus Kling 12.11.2014 01:20
quelle
0

Sehen Sie sich die FileChannel-API hier an. Um die Datei zu sperren, können Sie hier

    
Cshah 29.03.2010 11:01
quelle
0

Windows verwendet obligatorische Sperren für Dateien, es sei denn, Sie geben beim Öffnen die richtigen Freigabeflags an. Wenn Sie eine ausgelastete Datei öffnen möchten, müssen Sie Win32-API CreateFile ein Handle mit den Freigabeflaggen FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE .

Dies wird innerhalb des JDK an einigen Stellen verwendet, um Dateien zum Lesen von Attributen und Dingen zu öffnen, aber soweit ich sehen kann, ist es nicht exportiert / verfügbar für Java-Klassenbibliothek. Sie müssten also eine native Bibliothek dafür finden.

Ich denke, als schnelle Lösung können Sie process.getInputStream() vom Befehl "cmd /D/C type file.lck"

lesen     
eckes 12.11.2014 00:49
quelle
0

Wenn Sie eine schnelle Lösung wünschen, die nicht unbedingt die eleganteste ist, überwachen Sie die Datei einfach auf Größenänderungen, öffnen Sie dann die Datei, suchen Sie die letzte Position, lesen Sie die neuen Daten, schließen Sie die Datei und überwachen Sie weiter.

Und wenn Leistung keine Rolle spielt, sollte das gut funktionieren. Wenn Sie jedoch Leistung benötigen, sollten Sie eine komplexere Lösung bevorzugen, die auf einer fortgeschrittenen Datei-IO-API basiert.

    
Erik Allik 12.11.2014 00:50
quelle

Tags und Links