Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux+;Java+;Windows:检查文件是否已完全复制_Java_Linux_File Copying_Fileobserver - Fatal编程技术网

Linux+;Java+;Windows:检查文件是否已完全复制

Linux+;Java+;Windows:检查文件是否已完全复制,java,linux,file-copying,fileobserver,Java,Linux,File Copying,Fileobserver,我有一个Java应用程序,它监视目录中的新文件,并处理它在目录中看到的任何新文件。 应用程序需要同时在linux和windows环境上运行。问题是在linux上,当用户手动复制目录中的文件时,应用程序会在文件完全复制到目录之前拾取该文件。 我已尝试使用各种方法锁定该文件,但应用程序能够获得该文件的锁定,即使该文件仍由linux系统复制。我还考虑使用 LSOF 命令检查文件,但它是Linux专用的,所以我尽量避免。 有人能建议一种方法防止应用程序提取不完整的文件吗? 提前感谢。您可以在2秒钟的时

我有一个Java应用程序,它监视目录中的新文件,并处理它在目录中看到的任何新文件。 应用程序需要同时在linux和windows环境上运行。问题是在linux上,当用户手动复制目录中的文件时,应用程序会在文件完全复制到目录之前拾取该文件。 我已尝试使用各种方法锁定该文件,但应用程序能够获得该文件的锁定,即使该文件仍由linux系统复制。我还考虑使用<强> LSOF <强>命令检查文件,但它是Linux专用的,所以我尽量避免。
有人能建议一种方法防止应用程序提取不完整的文件吗?
提前感谢。

您可以在2秒钟的时间间隔内检查文件大小,如果文件大小不同,则文件正在被复制,如果不一样,则可以转到:)

完成此操作的一种方法是,当您的程序检测到目录中存在新文件时,它可以将该文件添加到列表中,并使用以下方法定期检查列表中每个元素的文件大小:

文件长度


如果在一段时间后,文件大小没有改变,那么理论上,文件应该完全复制并刷新到目录。

也许post的答案是一个解决方案。您可以试试。

谢谢您的回复,我也考虑过这一点,但这似乎不是一个非常干净的解决方案。您还有其他建议吗?另一个可能的解决方案是让您的程序递归地搜索源文件,并用复制的文件检查其文件大小。您只需搜索一次,然后就可以将其绝对路径缓存到程序中的某个位置。解决此问题的一种方法是始终将两个文件复制到目标文件夹中。首先将实际数据文件复制到目标文件夹中,让我们调用该文件“fileName.dat”。此文件复制成功完成后,您将在目标文件夹中创建一个名为“fileName.done”的虚拟文件。您的应用程序检测到以“.done”结尾的文件,并且它知道有一个“fileName.dat”可以读取。如果我们能够控制谁在目录中复制文件,这将是有意义的,不幸的是,我们不知道谁将复制文件以及如何引导它们。在其大小稳定(例如5分钟)之前,不要使用它,或者任何你认为合适的。我相信你可以在文件仍在写入时读取它。为什么不试试这种方法?@Hector,因为你们不知道文件的结尾是临时的还是永久的。