我在Windows中具有以下文件夹和文件结构:
-INDIA
-City1
-File1.txt
-File12.txt
-City2
-File2.txt
-File22.txt
我已经写了一个标准的WatchService代码来监视文件夹结构中的任何更改。我面临的问题是,当我复制City1和City2文件夹并粘贴到相同位置(名称不同)时,watchservice会间歇性地捕获该文件夹中的文件。 例如,有时仅捕获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();
}
}
}