我尝试将一个非常小的文件复制粘贴到被监视的文件夹中。第一次操作很顺利,但在后续的所有操作中,我都会收到一个异常,说另一个进程已经处理了该文件。通过实验,我发现我的服务是在Windows创建文件时得到通知,而不是在复制其内容时得到通知。如果我锁定文件,Windows 就无法复制任何数据,文件也会变为空文件。另一方面,如果我将文件移动到目录中,一切都正常。
这是 Windows 的 bug 吗?我无法在 Mac 或 Linux 工作站上测试它。或者是我自己无能为力。感谢您的任何帮助。
我的代码如下:
这是 Windows 的 bug 吗?我无法在 Mac 或 Linux 工作站上测试它。或者是我自己无能为力。感谢您的任何帮助。
我的代码如下:
try (WatchService watchService = importPath.getFileSystem().newWatchService()) {
importPath.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
handleExistingFiles();
try {
do {
WatchKey watchKey = watchService.take();
if (!watchKey.isValid()) {
continue;
}
boolean hasCreationEvents = false;
for (WatchEvent<?> event : watchKey.pollEvents()) {
hasCreationEvents |= event.kind().equals(StandardWatchEventKinds.ENTRY_CREATE);
}
watchKey.reset();
if (hasCreationEvents) {
handleNewFiles();
}
}
while (!Thread.currentThread().isInterrupted());
}
catch (InterruptedException ignoredEx) {
Thread.currentThread().interrupt();
}
}