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.*; importjava.util.ArrayList; importjava.util.LinkedList; importjava.util.List; public classWatchFile { public static voidmain(String[] args) throwsException{ 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 = newFile(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()); } //重设WatchKey boolean valid =key.reset(); //如果重设失败,退出监听 if (!valid) { break; } } } }