# File überwachen



## Siassei (27. Mrz 2010)

Hallo,

gibt es in Java eine Möglichkeit, einen Ordner oder Datei zu überwachen? Evtl. für die Ereignisse Änderung, Neu und Löschen?


----------



## nrg (27. Mrz 2010)

einen thread starten, der in einem bestimmten intervall das überwacht, was du überwachen willst (kannst mir der Klasse File schon einiges anstellen). ist halt weng wenig information um dazu genauer was zu sagen.


----------



## eRaaaa (27. Mrz 2010)

Siassei hat gesagt.:


> Hallo,
> 
> gibt es in Java eine Möglichkeit, einen Ordner oder Datei zu überwachen? Evtl. für die Ereignisse Änderung, Neu und Löschen?



Momentan noch nicht, in NIO2 im JDK7 wirds dann so einen Service geben : The Java NIO.2 File System in JDK 7

Aber momentan könntest du, wie nrg schon sagt, einen Thread starten , Dateien in ne HashMap legen und dann bei jedem Lauf überprüfen. Gibt aber auch schon fertige Codeschnippsel, mit verschiedenen Listenern.. einfach mal bei google suchen.


----------



## Siassei (27. Mrz 2010)

nrg hat gesagt.:


> einen thread starten, der in einem bestimmten intervall das überwacht, was du überwachen willst (kannst mir der Klasse File schon einiges anstellen). ist halt weng wenig information um dazu genauer was zu sagen.


Danke für eure Anworten. Ich dachte da eher an einer Benachrichtigung vom Betriebssystem aus. Alle modernen Systeme BSD, Linux, Windows und wie sie alle heißen, müssten doch wissen wann sich etwas im Dateisystem ändert. Oder täusche ich mich da?

Das mit dem Thread ist klar, aber auch die einfachste Lösung. Mein Problem ist, dass ich innerhalb einer geringen Zeit, sagen wir mal < 10 s, erkennen muss ob eine Änderung vorliegt.
- Die Dateigröße schwankt von sehr klein bis zu einigen GB
- Die Anzahl der Dateien + Unterordner ist sehr hoch

Genau hier liegen die Probleme. Die Hash-Methode ist hier nicht zu gebrauchen. 
 - die großen Dateien bremsen das ganze aus
 - sehr viele kleine Dateien + eine Tiefe-Struktur ist auch nicht gerade förderlich

Ich denke zur Zeit daran, bestimmte Ordner bzw. Unterordner vom Betriebssyst. aus zu überwachen. Eben nicht alle. Bei Änderungen sollte das BS ein Event oder Callback ausführen und darauf würde ich gerne reagieren.


Zur Zeit versuche ich das mit Datum (Erstellung + Änderung) + Dateigröße zu lösen. Leider kann man bei den meisten Dateisystemen, darunter auch extX (X=Zahl), das Aufzeichnen von dem Datum ausschalten. Dies soll einen kleinen Performanceschub bieten. Daher ist dies keine sichere Methode um festzustellen, ob sich was geändert hat.


----------



## Siassei (27. Mrz 2010)

eRaaaa hat gesagt.:


> Momentan noch nicht, in NIO2 im JDK7 wirds dann so einen Service geben : The Java NIO.2 File System in JDK 7


Java 7 scheidet leider aus. Das ist noch Zukunftsmusik :-(
Auf den ersten Blick scheint mir die Lösung eher suboptimal. Kein Listener?


----------



## Wildcard (27. Mrz 2010)

JNotify


----------



## Gast2 (28. Mrz 2010)

Siassei hat gesagt.:


> Mein Problem ist, dass ich innerhalb einer geringen Zeit, sagen wir mal < 10 s, erkennen muss ob eine Änderung vorliegt.
> - Die Dateigröße schwankt von sehr klein bis zu einigen GB
> - Die Anzahl der Dateien + Unterordner ist sehr hoch


da wirst Du generell Probleme bekommen ... unter Windows bekommst Du für diesen Puffer 4 kBytes ... 16 Bytes werden davon pro Information immer benötigt - dazu kommt noch der Dateiname ... kannst Dir also selber ausrechnen wieviel Informationen Du erhälst bevor es Fehler regnet ... unter Windows kannst Du allerdings auch Unterverzeichnisse mit überwachen - was Linux nicht macht



> Genau hier liegen die Probleme. Die Hash-Methode ist hier nicht zu gebrauchen.
> - die großen Dateien bremsen das ganze aus


fi.LastWriteTime?

den passenden Link hast Du ja schon von Wildcard


----------



## Siassei (28. Mrz 2010)

Wildcard hat gesagt.:


> JNotify


Genau das was ich suchte 
Ich kannte nur Home - inotify-tools - GitHub



> unter Windows kannst Du allerdings auch Unterverzeichnisse mit überwachen - was Linux nicht macht


kann ich nicht bestätigen. Linux überwacht auch die Unterordner mit.
System: Fedora 12


----------



## Gast2 (28. Mrz 2010)

Siassei hat gesagt.:


> kann ich nicht bestätigen. Linux überwacht auch die Unterordner mit.



Quelle: _JNotify - Linux Notes - 2.Satz_


> Since Linux INotify API does not support recursive listening on a directory,


----------

