java7中新增WatchService可以监控文件的变动信息(监控到文件是修改,新增、删除等事件;)
其中注册事件是需要的:
StandardWatchEventKinds.ENTRY_MODIFY,//更新 StandardWatchEventKinds.ENTRY_DELETE,//创建 StandardWatchEventKinds.ENTRY_CREATE,//删除
下面是案例:
import java.io.*; import java.nio.file.*; import java.nio.file.attribute.*; import java.nio.channels.*; import java.util.ArrayList; import java.util.LinkedList; import java.util.List;public class WatchFile {public static void main(String[] args) throws Exception{String filePath = ("E:");// 获取文件系统的WatchService对象WatchService watchService = FileSystems.getDefault().newWatchService();Paths.get(filePath).register(watchService , StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);// 如要监控子文件File file = new File(filePath);LinkedList<File> fList = new LinkedList<File>();fList.addLast(file);while (fList.size() > 0 ) {File f = fList.removeFirst();if(f.listFiles() == null)continue;for(File file2 : f.listFiles()){if (file2.isDirectory()){//下一级目录 fList.addLast(file2);//依次注册子目录 Paths.get(file2.getAbsolutePath()).register(watchService , StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);}}}while(true){// 获取下一个文件改动事件WatchKey key = watchService.take();for (WatchEvent<?> event : key.pollEvents()) {System.out.println(event.context() +" --> " + event.kind());}// 重设WatchKeyboolean valid = key.reset();// 如果重设失败,退出监听if (!valid) {break;}}} }