我试图find一个跨平台的方式,可靠地告诉一个文件是否完成了复制(通过外部进程)。
以前,在OSX / Linux上,我只是在检查
File file = new File("path/to/file"); file.length()
然后等待几秒钟,再次检查它是否已经改变。
然而这在Windows上不起作用,因为该方法总是返回完整文件的大小(即最终将被复制的内容)。
我也试过检查lastModified时间戳,但这似乎并没有改变。
一种选择是尝试打开文件进行写入,使用“附加” FileOutputStream
– 如果可以这样做,则另一个进程不可能写入文件。 当然,您不需要编写任何数据,只需创建流。
(编辑删除使用lastModified
已经在问题中的想法。)
我最终通过在两个不同的时间点计算文件的校验和和散列(而不是长度)来解决这个问题,并检查它们是否已经改变,以确定文件是否仍然被写入。