nio实现文件夹内容的监听
参考的博客
package com.jp.filemonitor; 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; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ResourceListener { private static ExecutorService fixedThreadPool = Executors.newCachedThreadPool(); private WatchService ws; private String listenerPath; private ResourceListener(String path) { try { ws = FileSystems.getDefault().newWatchService(); this.listenerPath = path; start(); } catch (IOException e) { e.printStackTrace(); } } private void start() { fixedThreadPool.execute(new Listner(ws,this.listenerPath)); } public static void addListener(String path) throws IOException { ResourceListener resourceListener = new ResourceListener(path); Path p = Paths.get(path); p.register(resourceListener.ws,StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_CREATE); } public static void main(String[] args) throws IOException { ResourceListener.addListener("F:\\"); ResourceListener.addListener("d:\\"); } } class Listner implements Runnable { private WatchService service; private String rootPath; public Listner(WatchService service,String rootPath) { this.service = service; this.rootPath = rootPath; } public void run() { try { while(true){ WatchKey watchKey = service.take(); List<WatchEvent<?>> watchEvents = watchKey.pollEvents(); for(WatchEvent<?> event : watchEvents){ //TODO 根据事件类型采取不同的操作。。。。。。。 System.out.println("["+rootPath+event.context()+"]文件发生了["+event.kind()+"]事件"+ event.count()); } watchKey.reset(); } } catch (InterruptedException e) { e.printStackTrace(); }finally{ System.out.println("fdsfsdf"); try { service.close(); } catch (IOException e) { e.printStackTrace(); } } } }