Maison > Java > javaDidacticiel > le corps du texte

Partage de cas de code sur la façon d'utiliser WatchService en Java pour surveiller les modifications de fichiers

黄舟
Libérer: 2017-10-16 09:55:12
original
2047 Les gens l'ont consulté

Cet article présente principalement un exemple de Java utilisant WatchService pour surveiller les modifications de fichiers. L'éditeur pense que c'est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil

Parmi les différentes solutions pour implémenter le centre de configuration, il y a la méthode WatchService basée sur JDK7+, assez pratique dans les applications autonomes.

Le code est le suivant :


package com.longge.mytest;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;

/**
 * 测试JDK的WatchService监听文件变化
 * @author yangzhilong
 *
 */
public class TestWatchService {
  public static void main(String[] args) throws IOException {
    // 需要监听的文件目录(只能监听目录)
    String path = "d:/test";
    
    WatchService watchService = FileSystems.getDefault().newWatchService();
    Path p = Paths.get(path);
    p.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, 
        StandardWatchEventKinds.ENTRY_DELETE, 
        StandardWatchEventKinds.ENTRY_CREATE); 
    
    Thread thread = new Thread(() -> {
      try { 
        while(true){ 
          WatchKey watchKey = watchService.take(); 
          List<WatchEvent<?>> watchEvents = watchKey.pollEvents(); 
          for(WatchEvent<?> event : watchEvents){ 
            //TODO 根据事件类型采取不同的操作。。。。。。。 
            System.out.println("["+path+"/"+event.context()+"]文件发生了["+event.kind()+"]事件");  
          } 
          watchKey.reset(); 
        } 
      } catch (InterruptedException e) { 
        e.printStackTrace(); 
      }
    });
    thread.setDaemon(false);
    thread.start();
    
    // 增加jvm关闭的钩子来关闭监听
    Runtime.getRuntime().addShutdownHook(new Thread(() -> {
      try {
        watchService.close();
      } catch (Exception e) {
      }
    }));
  }
}
Copier après la connexion

Le résultat de l'exécution de l'exemple est similaire au suivant :

[d :/test/1.txt] fichier L'événement [ENTRY_MODIFY] s'est produit
L'événement [ENTRY_DELETE] s'est produit dans le fichier [d:/test/1.txt]
L'événement [ENTRY_CREATE] s'est produit dans le fichier [ d:/test/new text document.txt]
[d:/test/New Text Document.txt] le fichier a un événement [ENTRY_DELETE]
[d:/test/222.txt] le fichier a un [ ENTRY_CREATE] événement

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal