Home  >  Article  >  Java  >  Code case sharing on how to use WatchService in Java to monitor file changes

Code case sharing on how to use WatchService in Java to monitor file changes

黄舟
黄舟Original
2017-10-16 09:55:121993browse

This article mainly introduces an example of Java using WatchService to monitor file changes. The editor thinks it is quite good, so I will share it with you now and give it as a reference. Let’s follow the editor and take a look.

Among the various solutions for implementing the configuration center, there is the WatchService method based on JDK7+, which is quite practical in stand-alone applications.

The code is as follows:


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

The result of running the example is similar to the following:

[d:/test/1.txt] file occurred [ENTRY_MODIFY] event
[ENTRY_DELETE] event occurred in the file [d:/test/1.txt]
[ENTRY_CREATE] event occurred in the file [d:/test/new text document.txt]
[ The [ENTRY_DELETE] event occurred in the file d:/test/New Text Document.txt]
[ENTRY_CREATE] event occurred in the file d:/test/222.txt

The above is the detailed content of Code case sharing on how to use WatchService in Java to monitor file changes. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn