importjava.io.IOException;import java.nio.file.*;importjava.util.List;public class Watcher implementsRunnable{privateString filePath;privateWatchService watchService;publicWatcher(String filePath) {this.filePath =filePath;
}
@Overridepublic voidrun() {try{this.watchService =FileSystems.getDefault().newWatchService();
Path path=Paths.get(filePath);
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.OVERFLOW);
printLog("开始监听文件夹:{}", filePath);
WatchKey key;while ((key=watchService.take()) != null) {
List> watchEvents =key.pollEvents();for(WatchEvent>watchEvent : watchEvents) {
WatchEvent.Kind> kind =watchEvent.kind();if (kind ==StandardWatchEventKinds.ENTRY_CREATE) {
printLog("新建文件: {}, 次数: {}", watchEvent.context(), watchEvent.count());
}else if (kind ==StandardWatchEventKinds.ENTRY_DELETE) {
printLog("删除文件: {}, 次数: {}", watchEvent.context(), watchEvent.count());
}else if (kind ==StandardWatchEventKinds.ENTRY_MODIFY) {
printLog("修改文件: {}, 次数: {}", watchEvent.context(), watchEvent.count());
}else if (kind ==StandardWatchEventKinds.OVERFLOW) {
printLog("overflow: {}, 次数: {}", watchEvent.context(), watchEvent.count());
}
}
key.reset();
}
}catch(IOException e) {
System.out.println("获取监听器失败");
}catch(InterruptedException e) {
e.printStackTrace();
}
}private voidprintLog(String format, Object...objects) {
format= format.replaceAll("\\{\\}", "%s");
System.out.println(String.format(format,objects));
}public static voidmain(String[] args) {new Thread(new Watcher("D:\\tmp")).start();
}
}