[JAVA] Je souhaite surveiller un fichier spécifique avec WatchService

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

Je souhaite surveiller un fichier spécifique avec WatchService
Je souhaite pouvoir lire des fichiers en utilisant refile avec administrate [rails6]
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux créer un fichier Parquet même en Ruby
Je souhaite développer une application web!
Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Je veux accrocher la génération / ouverture d'un fichier journal avec log4j # FileAppender
Je souhaite ajouter une fonction de navigation avec ruby on rails
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux écrire un test unitaire!
Je veux extraire entre des chaînes de caractères avec une expression régulière
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Si vous voulez créer un fichier zip avec Ruby, c'est rubyzip.
Je veux ForEach un tableau avec une expression Lambda en Java
Gratter et écrire des éléments spécifiques dans un fichier
[Ruby] Je veux faire un saut de méthode!
Je veux utiliser java8 forEach avec index
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions
Je veux jouer avec Firestore de Rails
J'ai essayé de casser le bloc avec java (1)
Je souhaite effectuer un traitement d'agrégation avec spring-batch
[Rails] Je veux charger du CSS avec webpacker
Je veux créer un fichier de guerre Servlet avec OpenJDK sur CentOS7. Sans mvn. Sans connexion Internet.
Je souhaite télécharger un fichier sur Internet en utilisant Ruby et l'enregistrer localement (avec prudence)
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
Je veux utiliser une petite icône dans Rails
Je souhaite utiliser le mode sombre avec l'application SWT
Je souhaite appliquer ContainerRelativeShape uniquement à des coins spécifiques [SwiftUI]
Je souhaite authentifier les utilisateurs auprès de Rails avec Devise + OmniAuth
Je souhaite définir une fonction dans la console Rails
J'ai essayé OCR de traiter un fichier PDF avec Java
Je veux faire des transitions d'écran avec kotlin et java!
Je veux cliquer sur une broche GoogleMap dans RSpec
Je souhaite créer une annotation générique pour un type
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Je souhaite lire le fichier de propriétés avec un nom de fichier autre que application.yml ou application- [nom du profil] .yml avec Spring Boot
Je veux convertir des caractères ...
Comment demander un fichier CSV au format JSON avec jMeter
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
[Java] Je souhaite convertir un tableau d'octets en un nombre hexadécimal
Je veux trouver un chemin relatif dans une situation où Path est utilisé
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Je veux pousser une application créée avec Rails 6 vers GitHub