| 

.NET C# Java Javascript Exception

6
Hallo,

ich möchte aus Java heraus bestimmte Verzeichnisse und/oder Dateien auf Veränderungen überwachen, d.h. in meinem Programm möchte ich über Veränderungen informiert werden, sobald sie auftreten.
Gibt es direkt in Java dafür Methoden/Klassen bei denen man sich mit einem Listener registrieren kann und dann bei Auftreten dieser Listener gerufen wird oder geht es nur über Timer (in bestimmten Abständen Zustand der Datei überprüfen mit CRC o.Ä. ...)

Danke,
Christoph
07.09.2009
pocketdevel 363 2 6
3 Antworten
3
Dazu gibt es dir Bibliothek jnotify. Diese setzt auf nativen code auf, ist aber für verschiedene Plattformen verfügbar, und somit "fast" portabel.

http://jnotify.sourceforge.net/
07.09.2009
keinhaar 208 1 3
Danke, diese Bibliothek ist schon mal ein guter Start. Ich werd' sie mal demnächst ausprobieren. Es ist nur nicht ganz ersichtlich, ob sie auch nativ unter 64bit Systemen und 64bit JVM läuft. Mal schauen...

Stichwort portabel: Eine reine Lösung in Java, denke ich, wird's kaum geben.
pocketdevel 08.09.2009
1
Der Vollständigkeit halber und weil die Frage wieder nach oben gespült wurde:

In Apache Commons IO gibt es den FileAlterationObserver. Außerdem wurde uns mittlerweile ja Java 7 beschert mit dem neuen WatchService. Wie beide intern implementiert sind, entzieht sich allerdings meiner Kenntnis.
05.12.2011
Also ich finde der WatchService sieht gut aus! :) Zumindest das was auf deiner verlinkten Seite gelesen habe. Erinnert mich an FileSystemWatcher aus .NET
Nicolai Schönberg 06.12.2011
1
Und Dein Kommentar erinnert mich daran, dass ein anderer ck-Nutzer neulich anklingen ließ, er halte .NET für eine Kopie von Java ;-)
Matthias Hlawatsch 07.12.2011
Ha! :) @Matthias stimmt ja auch an vielen Stellen. Aber wenn der WatchService erst mit Java 7 gekommen ist war es diesmal anders herum! :) Allgemein denke ich das die Sprachen sich untereinander dinge abschauen - Nicht nur bei Java :)
Nicolai Schönberg 07.12.2011
0
Die Timerloesung halte ich unter praktischen Erwaegungen fuer ausreichend, wenn Portabilitaet, evtl. auch die Ueberwachung von nicht-Filesystem-gebundenen Resourcen (z.B. URLs, Inhalte von Archiven, etc) gewuenscht ist, und sich die Menge der Ueberwachten Ressourcen in Grenzen haelt.

Je kuerzer die Timer, desto geringer das Risiko, dass sich zwischen zwei Timerevents eine Ressource mehr als einmal aendert. Wenn es nun nur darum geht, 'irgendeine' Aenderung festzustellen, dann koennte es sogar egal sein, ob sich die Ressource nur einmal oder mehrfach geandert hat. Bliebe noch die Moeglichkeit, dass die Ressource zwischen zwei Events kurz geaendert, dann jedoch schnell wieder zurueckgestetzt wird. Die Timerloesung wuerde das nicht bemerken, allerdings hat ein solches Szenario kaum einen praktischen Nutzen.

Der groesste Nachteil der Timerloesung ist allerdings, dass man sich 'merken' muss, wie die Ressourcen zu Beginn der Ueberwachung aussehen (z.B. speichern von Pfad, Name, Datum, Zugriffsrechten) um bei jedem Timerevent vergleichen zu koennen. Von daher eignet sich die Timerloesung eher fuer einzelne Verzeichnisse als fuer ganze Festplatten.
08.09.2009
Andreas_D 21 1

Stelle deine Java-Frage jetzt!