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