Par exemple, si vous voulez que WatchService détecte que dir \ file.txt a changé, vous voudrez écrire un code comme celui-ci, ce qui déclenche une exception d'exécution ( NotDirectoryException).
var file = Paths.get("dir", "file.txt");
var watcher = FileSystems.getDefault().newWatchService();
file.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
[JavaDoc pour Path :: register](https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Path.html#register-java.nio.file.WatchService Comme vous pouvez le voir dans -java.nio.file.WatchEvent.Kind: A-java.nio.file.WatchEvent.Modifier ...-), la cible d'enregistrement de WatchService est un répertoire. Alternativement, on peut dire que «WatchService» surveille les événements qui se produisent dans les fichiers et répertoires sous le répertoire enregistré. Par conséquent, si vous souhaitez détecter uniquement les événements d'un fichier spécifique, vous devez par exemple concevoir les éléments suivants.
var file = Paths.get("dir", "file.txt");
var directory = file.getParent();
var watcher = FileSystems.getDefault().newWatchService();
directory.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
//Fichier jusqu'à ce qu'il soit interrompu par une interruption, etc..Continuez à surveiller txt.
while (true) {
var watchKey = watcher.take();
for (var event : watchKey.pollEvents()) {
var modified = (Path) event.context();
if (modified.equals(file.getFileName())) {
// Do Something
}
}
}
Vous pouvez obtenir des informations sur l'entrée où l'événement s'est produit avec WatchEvent :: context. La valeur de retour de WatchEvent :: context est ʻObject, mais en réalité, un objet Path est retourné, donc dans l'exemple ci-dessus, il est converti en variable modified`.
De plus, l'objet Path stocké dans modified est un chemin relatif du répertoire enregistré dans WatchService. En bref, il s'agit de var modified = Paths.get (" file.txt ");, vous devez donc faire attention lorsque vous comparez avec ʻequals` etc.
Recommended Posts