Der Prozess eines anderen Benutzers erstellt eine CSV-Datei, indem bei Auftreten von Ereignissen jeweils eine Zeile an sie angehängt wird. Ich habe keine Kontrolle über das Dateiformat oder den anderen Prozess, aber ich weiß, dass es nur anhängen wird.In Java, welches ist das beste/sicherste Muster für die Überwachung einer Datei, an die angehängt wird?
In einem Java-Programm möchte ich diese Datei überwachen, und wenn eine Zeile angehängt ist, lesen Sie die neue Zeile und reagieren Sie entsprechend dem Inhalt. Ignorieren Sie das CSV-Analyseproblem vorerst. Was ist der beste Weg, um die Datei auf Änderungen zu überwachen und Zeile für Zeile zu lesen?
Idealerweise verwendet dies die Standardbibliotheksklassen. Die Datei befindet sich möglicherweise auf einem Netzlaufwerk, daher möchte ich etwas Robustes bis zum Ausfall haben. Ich würde lieber keine Umfragen verwenden, wenn möglich - ich würde stattdessen eine Art Blockierungslösung bevorzugen.
Bearbeiten - da eine Blockierungslösung mit Standardklassen nicht möglich ist (danke für diese Antwort), was ist die robusteste Polling-Lösung? Ich würde lieber nicht die ganze Datei jedes Mal neu lesen, da sie ziemlich groß werden könnte.
Die obigen Codes garantieren das Lesen der angehängten Zeile? – DerekY
Meine Anforderung ist es, einen Ordner zu sehen und sobald eine Datei hinzugefügt/geschrieben/in den Ordner verschoben wurde, ergreifen Sie sofort eine Aktion (z. B. um die Datei per E-Mail zu versenden). Problem ist, dass es, wenn die Datei groß ist, eine Weile dauern kann, bis sie fertig geschrieben oder kopiert ist, während das FILE_CREATE-Ereignis angesagt wird, sobald die ersten Bytes der Datei in den Ordner geschrieben werden. Daher kann ich die Aktion nicht sofort ausführen. Was ist eine zuverlässige Methode, um festzustellen, ob die Datei vollständig geschrieben wurde, bevor eine Aktion ausgeführt wird? –