packagecom.jp.filemonitor;importjava.io.IOException;importjava.nio.file.FileSystems;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.nio.file.StandardWatchEventKinds;importjava.nio.file.WatchEvent;importjava.nio.file.WatchKey;importjava.nio.file.WatchService;importjava.util.List;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public classResourceListener {private static ExecutorService fixedThreadPool =Executors.newCachedThreadPool();privateWatchService ws;privateString listenerPath;privateResourceListener(String path) {try{
ws=FileSystems.getDefault().newWatchService();this.listenerPath =path;
start();
}catch(IOException e) {
e.printStackTrace();
}
}private voidstart() {
fixedThreadPool.execute(new Listner(ws,this.listenerPath));
}public static void addListener(String path) throwsIOException {
ResourceListener resourceListener= newResourceListener(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) throwsIOException {
ResourceListener.addListener("F:\\");
ResourceListener.addListener("d:\\");
}
}class Listner implementsRunnable {privateWatchService service;privateString rootPath;publicListner(WatchService service,String rootPath) {this.service =service;this.rootPath =rootPath;
}public voidrun() {try{while(true){
WatchKey watchKey=service.take();
List> 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();
}
}
}
}