Heim  >  Artikel  >  Java  >  Code-Case-Sharing zur Verwendung von WatchService in Java zur Überwachung von Dateiänderungen

Code-Case-Sharing zur Verwendung von WatchService in Java zur Überwachung von Dateiänderungen

黄舟
黄舟Original
2017-10-16 09:55:122041Durchsuche

In diesem Artikel wird hauptsächlich ein Beispiel für die Verwendung von WatchService zum Überwachen von Dateiänderungen durch Java vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor, um einen Blick darauf zu werfen

Unter den verschiedenen Lösungen zur Implementierung des Konfigurationscenters gibt es die auf JDK7+ basierende WatchService-Methode, die in eigenständigen Anwendungen durchaus praktisch ist.

Der Code lautet wie folgt:


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

Das Ergebnis der Ausführung des Beispiels ähnelt dem folgenden:

[d :/test/1.txt]-Datei Das Ereignis [ENTRY_MODIFY] ist aufgetreten.
Das Ereignis [ENTRY_DELETE] ist in der Datei [d:/test/1.txt] aufgetreten.
Das Ereignis [ENTRY_CREATE] ist in der Datei [ aufgetreten. d:/test/new text document.txt]
[d:/test/New Text Document.txt]-Datei hat ein [ENTRY_DELETE]-Ereignis
[d:/test/222.txt]-Datei hat ein [ ENTRY_CREATE]-Ereignis

Das obige ist der detaillierte Inhalt vonCode-Case-Sharing zur Verwendung von WatchService in Java zur Überwachung von Dateiänderungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn