要處理 Inotify Java 事件,您需要使用 Java 的 java.nio.file
包中的 WatchService
。以下是一個簡單的示例,說明如何使用 WatchService 處理文件系統事件:
首先,確保您的系統支持 Inotify。在 Linux 和 macOS 上,它通常是默認啟用的。在 Windows 上,您可能需要啟用文件系統事件通知。
導入所需的類:
import java.io.IOException;
import java.nio.file.*;
public static void main(String[] args) throws IOException, InterruptedException {
// 替換為您要監視的目錄路徑
String directoryToWatch = "/path/to/your/directory";
// 注冊 WatchService
registerDirectoryForEvents(directoryToWatch);
}
registerDirectoryForEvents
方法:private static void registerDirectoryForEvents(String directoryPath) throws IOException {
WatchService watchService = FileSystems.getDefault().newWatchService();
Path path = Paths.get(directoryPath);
// 注冊感興趣的事件類型
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
System.out.println("開始監視目錄: " + directoryPath);
while (true) {
// 獲取并處理下一個事件
WatchKey watchKey = watchService.take();
for (WatchEvent<?> event : watchKey.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
// 根據事件類型處理
if (kind == StandardWatchEventKinds.OVERFLOW) {
continue;
}
WatchEvent<Path> ev = (WatchEvent<Path>) event;
Path fileName = ev.context();
System.out.println("事件類型: " + kind + ", 文件名: " + fileName);
}
// 重置 WatchKey 以繼續接收事件
boolean valid = watchKey.reset();
if (!valid) {
break;
}
}
}
現在,每當在監視的目錄中發生創建、刪除或修改事件時,都會打印出相應的事件類型和文件名。您可以根據需要修改此示例以執行其他操作,例如刪除已更改的文件等。