如何确定文件当前是否在Java中增长(与操作系统无关)

我试图find一个跨平台的方式,可靠地告诉一个文件是否完成了复制(通过外部进程)。

以前,在OSX / Linux上,我只是在检查

File file = new File("path/to/file"); file.length() 

然后等待几秒钟,再次检查它是否已经改变。

然而这在Windows上不起作用,因为该方法总是返回完整文件的大小(即最终将被复制的内容)。

我也试过检查lastModified时间戳,但这似乎并没有改变。

一种选择是尝试打开文件进行写入,使用“附加” FileOutputStream – 如果可以这样做,则另一个进程不可能写入文件。 当然,您不需要编写任何数据,只需创建流。

(编辑删除使用lastModified已经在问题中的想法。)

我最终通过在两个不同的时间点计算文件的校验和和散列(而不是长度)来解决这个问题,并检查它们是否已经改变,以确定文件是否仍然被写入。