Мне нужно отслеживать заданный каталог и все его подкаталоги для изменений (особенно добавление файлов и каталогов).Рекурсивно контролировать каталог и все подкаталоги в java
Мой текущий код выглядит следующим образом
Path watchFolder = Paths.get("D:/watch");
WatchService watchService = FileSystems.getDefault().newWatchService();
watchFolder.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
watchFolder.register(watchService, StandardWatchEventKinds.ENTRY_DELETE);
watchFolder.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
boolean valid = true;
do {
WatchKey watchKey = watchService.take();
for (WatchEvent event : watchKey.pollEvents()) {
WatchEvent.Kind kind = event.kind();
if (StandardWatchEventKinds.ENTRY_CREATE.equals(kind)) {
String fileName = event.context().toString();
System.out.println("File Created:" + fileName);
}
}
valid = watchKey.reset();
} while (valid);
Этот код является только возможность отслеживать изменения родительского каталога. Если я добавлю каталог в родительский каталог, он сможет запустить событие. Но, если я добавлю файл внутри подкаталога, он не сможет обнаружить.
FYI: Я также попытался JNotify, но он продолжает говорить java.lang.UnsatisfiedLinkError: no jnotify_64bit in java.library.path
Есть ли лучшее решение, чем это?
Я думаю, на это уже был дан ответ: http://stackoverflow.com/questions/17850940/watching-a-directory-and-sub-directory-for-create-modify-and-changes-in-java – fishi