Java "FolderWatcher" mit Java 1.6

dermoritz

Bekanntes Mitglied
Wenn man nach "java watch folder" googelt findet man an erster stelle das: Watching a Directory for Changes (The Java™ Tutorials > Essential Classes > Basic I/O)

Nach den ersten Tests und Weiterem rumgegoogle wird schnell klar, das funktioniert erst mit Java 7 :-(. Gibt es etwas ähnliches für Java 6? Mit dem jemand hier Erfahrung hat? Oder wie überwacht ihr Verzeichnisse?
(in meinem Fall muss ein ständig laufender Dienst erkennen ob etwas in einem Verzeichnis passiert ist (modify oder create) und dann seine Arbeit wieder aufnehmen.)
 
Danke, aber "Its main service is periodic polling" ist das Problem. Ich hätte gern etwas event-basiertes. In meinem Fall hab ich den Code schon fertig der mir sagt, das ein Ordner mit entsprechendem Namen existiert. Das Problem ist nur, dass dies im Moment in einer while(true) -Schleife passiert. (Es werden ständig alle Ordner mit einem Regexp verglichen)

Diesen Code würde ich gerne behalten aber nur ausführen wenn es sicht lohnt - wenn etwas im Verzeichnis passiert ist ("create").
 
Ich hätte gern etwas event-basiertes.
... aber nur ausführen wenn es sicht lohnt - wenn etwas im Verzeichnis passiert ist ("create").
Das Proble ist, dass dir das Filesystem nicht mitteilt, wenn etwas "passiert ist" - es wird immer auf ein polling hinaus laufen - ob du es selbst programmierst oder eine lib verwendest, die für dich pollt und dann ein event schickt.
 
Das eigentlich alle freien Bibliotheken auf Polling setzen ist mir inzwischen auch bewusst geworden. Wobei es wohl kommerzielle Bibliotheken gibt die betriebssystemabhängig auf Filesystemfeatures zurückgreifen können.
Und soweit ich glaube trifft dies auch für den Watchservice in Java 7 zu?!

Dann mal Danke - ich werde wohl bis dahin eine Bibliothek mit sehr einfachem Polling verwenden.


Äh - ich hab gerade mal bei jNotify rumgelesen. Das scheint native Betriebssystem Geschichten zu benutzen (JNotify - Windows). Im Downloadpaket ist dann auch eine dll Datei enthalten.

🙂
 
Zuletzt bearbeitet:
Wobei es wohl kommerzielle Bibliotheken gibt die betriebssystemabhängig auf Filesystemfeatures zurückgreifen können.
Und soweit ich glaube trifft dies auch für den Watchservice in Java 7 zu?!

Wenn es diese BS-Features gäbe, könnte man ja möglicherweise auch selbst darauf aufsetzen, aber ich bezweifle, dass es sowas gibt. Mir ist nicht einmal in C / C++ etwas Vergleichbares bekannt und damit sitzt man ja wesentlich direkter beim BS als mit Java.

Polling ist nicht zwingend "böse" und es ist durchaus zu überlegen selbst etwas zu implementieren, dann weiss man wenigstens was man hat ;-)
 
wie gesagt (Edit)
jnotify scheint es "nativ" zu lösen (mit Events).

Danke Bananenkasper

Scheint ...... heute scheint auch die Sonne (vielleicht ausserhalb des Nebels, aber villeicht hat es da auch Wolken)
Zitat Vater: "Vom hören Sagen lernt man lügen" 🙂

Aber es scheint wirklich so zu sein, dass diese Features nicht aus Java verwendet werden können wenn JNotify in C++ geschrieben wurde. Es währe zwar wichtig für mein Nebenprojekt das zu verstehen, aber leider fehlt die Zeit das jetzt genau er anzuschauen. Es scheinen allerdings eher hookfunktionen als Events zu sein.

Hm - merkt man das "scheint" nicht zu meinem Standardvokabular gehört? 😀
Ich hab lieber Fakten
 
JNotify arbeitet echt Event basiert mit nativem Code. Auf Linux zB mit iNotify sofern vorhanden.
Erst wenn das FS/OS keine Events unterstützt oder nicht supported wird fällt es AFAIR auf Polling zurück.
 
mir persönlich ist wurscht wie das Teil die Events des Betriebssystems erfährt. Entscheidend ist, dass es kein Polling verwendet - denn das hatte ich selbst schon fast fertig (in der ersten version war mein polling mit Maximalgeschwindigkeit (while(true)) ;-)).
mit jnotify wird das gane schön und irgendwann mit java 7 noch schöner.

Vielen Dank also nochmal für den Hinweis
 

Zurück
Oben