Mémo de méthode de surveillance des changements de répertoire (Java, Kotlin)

Comment utiliser WatchService de Java, j'ai fait une note car il s'adaptait de manière inattendue lorsque j'ai commencé avec une sensation de légèreté. Le code est Kotlin, mais est-ce le même en Java?

class Watcher private constructor(
        val path: Path,
        val listener: (e: WatchEvent<Path>, target: Path) -> Unit
) : AutoCloseable {

    private val executor = Executors.newSingleThreadExecutor()
    private val watchService = path.fileSystem.newWatchService()

    init {
        val watchKey = path.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY)

        executor.submit {
            while (true) {
                val key = watchService.take()
                assert(watchKey == key, { "Une seule clé est enregistrée, elle doit donc toujours correspondre" })

                for (e in watchKey.pollEvents()) {
                    @Suppress("UNCHECKED_CAST")  //Chaque fois que l'événement WatchKey est au-dessus, il est garanti qu'il s'agit de Path
                    listener(
                            e as WatchEvent<Path>,
                            path.resolve(e.context())
                    )
                }
                val valid = watchKey.reset()
                if (!valid) throw RuntimeException("Ne devrait pas arriver normalement")
            }
        }
    }

    override fun close() {
        executor.shutdownNow()
        executor.awaitTermination(1, TimeUnit.SECONDS)  //Cette valeur est appropriée
        watchService.close()
    }

    companion object {
        fun watch(
                path: Path,
                listener: (e: WatchEvent<Path>, target: Path) -> Unit
        ): Watcher {
            return Watcher(path, listener)
        }
    }

}

point

  1. Annulé explicitement en appelant la méthode cancel
  2. Annulé implicitement car l'objet n'est plus accessible
  3. Annulé en fermant le service de surveillance

Donc, ce code ne se produit généralement pas ...

Plan d'amélioration

Impressions

Difficile à utiliser ...

Recommended Posts

Mémo de méthode de surveillance des changements de répertoire (Java, Kotlin)
Mémo d'apprentissage Java (méthode)
Mémo de la méthode d'étude Java Silver
Créer une méthode java [Memo] [java11]
[Java] Mémo de méthode de mesure du temps de traitement
Méthode Java
Mémo Java
Méthode Java
[Java] méthode
[Java] méthode
Mémo: [Java] Vérifiez le contenu du répertoire
Mémo pour la migration de Java vers Kotlin
java quoi que ce soit mémo
Mémo Java Silver
java, mémo maven
Référence de la méthode Java8
Remarque sur Java SE 7
[Java] méthode forEach
java n'importe quoi mémo 2
référence de la méthode java8
création de répertoire java
[Java] Méthode aléatoire
[Java] méthode de fractionnement
Mémo de spécification Java
[Java] Obtenir KFunction à partir de la méthode / du constructeur en Java [Kotlin]
Mémo de modèle Java
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
[Sécurité Null] Mémo de comparaison Kotlin Java Utilisation correcte de la sécurité Null
Méthode de connexion JAVA DB
Mémo de l'environnement de développement Java
Changer de siège avec Java
mémo de connaissances de base java
Mémo Java Kuche Day
Répertoire de base Mac Java
À propos de la liaison de méthode Java
A propos des méthodes de fractionnement (Java)
Etudier Java 8 (voir méthode)
[Java, Kotlin] Variance de type
Programmation Java (méthode de classe)
mémo d'expression java lambda
(Mémo) Java pour instruction
expression lambda java [écriture de notes]
Mémo d'apprentissage Java (interface)
[Java] Mémo d'héritage implicite
Mémo d'apprentissage Java (héritage)
mémo de programmation du concours java
[Java] Notes de méthode de base
[Mémo] Liste liée Java
[Kotlin] Obtenez le constructeur / la méthode Java de KFunction et appelez-le