在获取Java文件对象之前,知道文件是否完整

时间:2011-12-23 14:26:42

标签: java file

我正在为新文件轮询文件系统,这是由某人从网络界面上传的。 现在我必须处理每个新文件,但在此之前我想确保我正在处理的文件是完整的(我的意思是说它完全通过Web界面传输)。

如何在处理之前验证文件是否已完整下载?

2 个答案:

答案 0 :(得分:8)

重命名文件名是大多数(如果不是全部)文件系统中的原子操作。您可以通过将文件上传到可识别的临时名称并在上传完成后立即重命名来使用此功能。

通过这种方式,您只能“看到”那些完全上传并且可以安全处理的文件。

答案 1 :(得分:2)

rsp的回答非常好。如果它对您不起作用,并且您的轮询代码在与保存文件的Web服务器的进程不同的进程中运行,您可能需要尝试以下操作:

通常,在保存文件时,共享选项是“允许任何人阅读”和“不允许任何人写”。 (独占写入。)因此,您可以尝试使用独占写访问权限打开文件:如果失败,则您知道Web服务器仍然保持文件打开并写入文件。如果成功,那么您就知道Web服务器已完成。当然一定要尝试一下,因为我不能保证这正是Web服务器选择锁定文件的方式。