在Java中,你可以使用java.nio.file.WatchService
來監聽文件系統的變化,包括文件的創建、修改、刪除等事件。這是一個比inotify
更現代、更靈活的API。
以下是一個簡單的示例,演示如何使用WatchService
來監聽一個目錄中的文件變化:
import java.io.IOException;
import java.nio.file.*;
public class FileWatcher {
public static void main(String[] args) throws IOException, InterruptedException {
// 指定要監聽的目錄
Path dirToWatch = Paths.get("path/to/watch");
// 創建一個WatchService實例
WatchService watchService = FileSystems.getDefault().newWatchService();
// 注冊要監聽的事件類型,這里我們監聽ENTRY_CREATE、ENTRY_MODIFY和ENTRY_DELETE事件
dirToWatch.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
System.out.println("開始監聽目錄: " + dirToWatch);
while (true) {
// 獲取并處理下一個事件
WatchKey key = watchService.take();
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
// 根據事件類型輸出相應信息
if (kind == StandardWatchEventKinds.OVERFLOW) {
System.out.println("文件系統事件溢出");
} else {
WatchEvent<Path> ev = (WatchEvent<Path>) event;
Path fileName = ev.context();
System.out.println("發生事件: " + kind + " - " + fileName);
}
}
// 重置WatchKey,以便繼續接收事件
boolean valid = key.reset();
if (!valid) {
System.out.println("監聽目錄已關閉");
break;
}
}
}
}
將path/to/watch
替換為你要監聽的目錄路徑。運行此程序后,它將輸出該目錄中發生的所有文件創建、修改和刪除事件。