package wds;
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 = ("D:");//直接監聽D盤
// 獲取文件系統的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;
}
}
}
}