Wenn Sie beispielsweise möchten, dass "WatchService" erkennt, dass sich "dir \ file.txt" geändert hat, möchten Sie Code wie diesen schreiben, der eine Laufzeitausnahme auslöst ("NotDirectoryException").
var file = Paths.get("dir", "file.txt");
var watcher = FileSystems.getDefault().newWatchService();
file.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
[JavaDoc von Path :: register
](https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Path.html#register-java.nio.file.WatchService Wie Sie in -java.nio.file.WatchEvent.Kind: A-java.nio.file.WatchEvent.Modifier ...-) sehen können, ist das Registrierungsziel von "WatchService" ein Verzeichnis. Alternativ kann gesagt werden, dass "WatchService" die Ereignisse überwacht, die in den Dateien und Verzeichnissen unter dem registrierten Verzeichnis auftreten. Wenn Sie daher nur die Ereignisse einer bestimmten Datei erkennen möchten, müssen Sie beispielsweise Folgendes festlegen.
var file = Paths.get("dir", "file.txt");
var directory = file.getParent();
var watcher = FileSystems.getDefault().newWatchService();
directory.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
//Datei bis zur Unterbrechung durch Interrupt etc..Überwachen Sie txt weiter.
while (true) {
var watchKey = watcher.take();
for (var event : watchKey.pollEvents()) {
var modified = (Path) event.context();
if (modified.equals(file.getFileName())) {
// Do Something
}
}
}
Informationen zu dem Eintrag, bei dem das Ereignis aufgetreten ist, erhalten Sie mit "WatchEvent :: context". Der Rückgabewert von "WatchEvent :: context" ist "Object", aber in Wirklichkeit wird ein "Path" -Objekt zurückgegeben, sodass es im obigen Beispiel als Variable "modifiziert" umgewandelt wird.
Außerdem ist das in "modifiziert" gespeicherte "Pfad" -Objekt ein relativer Pfad aus dem in "WatchService" registrierten Verzeichnis. Kurz gesagt, es ist "var modifiziert = Paths.get (" file.txt ");", daher müssen Sie beim Vergleich mit "gleich" usw. vorsichtig sein.
Recommended Posts