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