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

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

黄舟
黄舟original
2017-10-16 09:55:122116parcourir

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) {
      }
    }));
  }
}

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!

Déclaration:
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