2010-08-02 15 views
8

Ich habe einen Ordner, in dem kontinuierlich neue Dateien ausgegeben werden.In Java, was ist der beste Weg, um Änderungen im Dateisystem zu erkennen (dh. Einen angegebenen Ordner, in dem die Dateien gedumpt werden) und füge die neu angekommenen Dateien zu einer Queue-Datenstruktur hinzu, so dass ich jede eingehende Datei sequentiell verarbeiten kann.Java erkennen Änderungen im Dateisystem

Ich bin mir der Funktion listFiles() in der File-Klasse bewusst, aber mit dieser kann ich nur Dateien erhalten, die zu einem Zeitpunkt verfügbar sind. Natürlich kann ich den Ordner kontinuierlich abfragen und die Liste der darin enthaltenen Dateien mit einem Thread abrufen. Aber ist dies der beste Weg oder gibt es einen besseren Weg, dies zu erreichen?

+0

Weitere generische Frage, die keine bestimmten Verzeichnisse erfordert: http://StackOverflow.com/Questions/494869/File-change-Listener-in-Java –

Antwort

8

Kontinuierlich Polling ist so, wie es in Java zu tun, jetzt ab - wenn auch nicht allzu oft abfragen, kann es eine schwere Operation recht sein, wenn das Verzeichnis viele enthält von Einträgen.

JDK 7 wird dies zu tun eine bestimmte API haben nur java.nio.file.WatchFile

+2

+1 für WatchFile –

+2

Sie hätten mit dem JavaDoc instaed von verknüpft werden können eine dumme Google-Suche. – Sylar

+0

Kontinuierliche Abfrage ist eine schlechte Idee. Ich würde empfehlen, JNotify zu verwenden, das in die Dateisystembenachrichtigungen eingreift. – Arnelism

4

Es gibt leider keine Standardmethode, dies zu tun, bis JDK7 herauskommt. Aber es gibt einige Bibliotheken im Internet, die dazu die nativen Funktionen verschiedener Betriebssysteme verwenden.

Die Bibliotheken, die ich angeschaut haben, sind jPoller und jNotify Aber am Ende landete ich einfach die Abfrage des Verzeichnisses, das für mich interessant war, als ich das zu tun hatte.