如何在java中打开文件之前等待Windows进程完成

Eos*_*rus 4 java io wait timertask

我实现了一个监听器,它会通知我们是否在特定目录中收到新文件。这是通过轮询和使用 TimerTask 来实现的。现在程序的设置是,一旦收到新文件,它就会调用另一个 java 程序来打开该文件并验证它是否是正确的文件。我的问题是,由于轮询发生在指定的秒数后,可能会出现文件被复制到该目录中并因此被 Windows 锁定的情况。

这会引发 IOException,因为尝试打开它进行验证的其他 java 程序不能(“文件正在被另一个进程使用”)。

有没有办法我可以知道Windows何时完成复制,然后调用第二个程序从java进行验证?

如果有人需要代码片段来提供帮助,我将非常乐意发布代码片段。

谢谢

jfa*_*ior 5

非常感谢您的所有帮助,我在 WatchEvent 上遇到了同样的问题。不幸的是,正如你所说, file.canRead() 和 file.canWrite() 都返回 true,即使文件仍然被 Windows 锁定。所以我发现,如果我尝试用相同的名称“重命名”它,我就知道 Windows 是否正在处理它。这就是我所做的:

    while(!sourceFile.renameTo(sourceFile)) {
        // Cannot read from file, windows still working on it.
        Thread.sleep(10);
    }
Run Code Online (Sandbox Code Playgroud)