【发布时间】:2017-04-29 09:16:31
【问题描述】:
我有一个 Java 应用程序,它监视目录中的新文件并处理它在目录中看到的任何新文件。 应用程序需要在 linux 和 windows env 上运行。问题出在 linux 上,当用户手动复制目录中的文件时,应用程序会在文件完全复制之前选择文件到目录中。 我尝试使用各种方法锁定文件,但即使文件仍在被 linux 系统复制,应用程序也能够获取文件的锁定。我也考虑过使用 lsof 命令检查文件,但它是特定于 linux 的,所以我试图避免这种情况。
有人可以建议一种方法来防止应用程序拾取不完整的文件吗? 提前致谢。
【问题讨论】:
-
解决此问题的一种方法是始终将两个文件复制到目标文件夹中。首先,您将实际数据文件复制到目标文件夹中,让我们将该文件称为“fileName.dat”。一旦此文件复制成功完成,您将在目标文件夹中创建一个名为“fileName.done”的虚拟文件。您的应用程序检测到以“.done”结尾的文件,并且知道有一个“fileName.dat”可供读取。
-
如果我们可以控制谁在复制目录中的文件,这将是有意义的,不幸的是我们不知道谁将复制文件以及如何引导他们。
-
在其大小稳定五分钟或您认为合适的任何时间之前不要使用它。
-
我相信您可以在文件仍在写入的同时读取文件。为什么不尝试这种方法?
-
@Hector 因为你不知道文件结尾是临时的还是永久的。
标签: java linux file-copying fileobserver