У меня ниже папка и структура файлов в Windows:
-INDIA
-City1
-File1.txt
-File12.txt
-City2
-File2.txt
-File22.txt
Я написал стандартный код WatchService для мониторинга любых изменений в структуре папок.Проблема, с которой я сталкиваюсь, заключается в том, что когда я копирую папки City1 и City2 и вставляю их в одно и то же место (с разными именами), служба наблюдения периодически перехватывает файлы в папке.Например, иногда это захватывает File1.txt, только File12.txt, иногда просто File2.txt, File22.txt.Это случайно.
В идеале, с копией папок City1 и City2, 4 файла также создаются, и их нужно захватывать.Есть ли способ записать эти файловые события или зарегистрировать файлы в watchservice?
Заранее большое спасибо.
public void start() {
WatchKey key;
while (true) {
try {
while ((key = watchService.poll(500, TimeUnit.MILLISECONDS)) != null) {
Path directory = keys.get(key);
for (WatchEvent<?> event : key.pollEvents()) {
@SuppressWarnings("rawtypes")
WatchEvent.Kind kind = event.kind();
@SuppressWarnings("unchecked")
Path name = ((WatchEvent<Path>) event).context();
Path child = null;
String infileName = "";
if (name != null) {
child = directory.resolve(name);
infileName = child.toString();
}
if (kind == StandardWatchEventKinds.ENTRY_MODIFY || kind == StandardWatchEventKinds.ENTRY_CREATE) {
if (Files.isDirectory(child)) {
traverseAndRegisterDirectories(child);
} else {
LOGGER.debug("ENTRY_MODIFY or ENTRY_CREATE " + infileName);
fileWatcher.onNewFile(infileName);
}
} else if (kind == OVERFLOW) {
LOGGER.debug("OVERFLOW " + infileName);
}
}
// reset key and remove from set if directory no longer accessible
boolean valid = key.reset();
if (!valid) {
keys.remove(key);
// all directories are inaccessible
if (keys.isEmpty()) {
break;
}
}
}
} catch (Exception ex) {
LOGGER.error("Error", ex);
sqlHelper.closeConnection();
}
}
}