Überprüfung auf Datei- und Verzeichnisänderungen in Java

Ich schreibe hier hauptsächlich, um Ratschläge zu erhalten, wo ich anfangen soll. Ich habe bereits eine Klasse implementiert, die ein Verzeichnis mithilfe von Javas WatchService rekursiv überwacht. Das Erkennen von Änderungen ist in Ordnung, aber mir ist ein schwerwiegender Fehler aufgefallen: Ich kann keine überwachten Verzeichnisse löschen, die überwachte Verzeichnisse enthalten. Dies scheint eine Einschränkung von WatchService zu sein.

Ich habe mich auch ein bisschen mit Apaches VFS FileListener befasst, aber bevor ich noch ungefähr sechs Stunden Zeit damit verbringe, eine Art Wrapper darum zu bauen, habe ich mir gedacht, dass ich vielleicht nur diejenigen fragen würde, die mehr wissen als ich.

Die überwachten Verzeichnisse müssen vollständig manipulierbar sein, mit der Ausnahme, dass das überwachte Stammverzeichnis nicht gelöscht oder umbenannt wird. Gibt es bereits eine gute Klasse, mit der ich Dateien und Verzeichnisse überwachen kann, die keine Dateien oder Ordner sperren? Ich versuche, einen Polling / Hash-Vergleich zu vermeiden, aber ich habe immer mehr das Gefühl, dass ich diesen Ansatz verwenden und eine Menge CPU-Ressourcen verbrauchen muss. Wo fange ich damit an? Idealerweise muss ich:

-Erstellung von Dateien und Verzeichnissen erkennen -Löschung von Dateien und Verzeichnissen erkennen -Umbenennen von Dateien und Verzeichnissen erkennen -Änderung von Dateien erkennen -Verschiebung von Dateien zwischen Verzeichnissen erkennen

Ich habe auch einige Hinweise darauf gesehen, dass Beobachter unzuverlässig sind und dass sie eine Kombination aus beiden verwenden (Abfragen gelegentlich, falls der Beobachter irgendwo versagt), aber ein Mann, der sich nach einem echten Schmerz anhört, den ich lieber vermeiden möchte, wenn es nicht so ist. ' Es ist sowieso der beste Weg. Ich habe das Gefühl, dass ich eine Abfrage und ein Hashing benötigen werde, insbesondere da ich das Verschieben und Umbenennen von Dateien erkennen möchte, aber bitte sagen Sie, ob bessere Optionen vorhanden sind.

Vielen Dank im Voraus und entschuldigen Sie die nicht so codespezifische Frage!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage