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()); } // 重設WatchKey boolean valid = key.reset(); // 如果重設失敗,退出監聽 if (!valid) { break; } } } }