当前位置: 首页 > 面试题库 >

Java:监视目录以移动大文件

高玮
2023-03-14
问题内容

我一直在编写一个监视目录的程序,当在目录中创建文件时,它将更改名称并将其移至新目录。在我的第一个实现中,我使用了Java的Watch Service
API,当我测试1kb文件时,它可以正常工作。出现的问题是实际上创建的文件在50-300mb之间。发生这种情况时,观察程序API会立即找到该文件,但由于仍在编写中而无法移动它。我尝试将观察程序置于一个循环中(该异常会生成异常,直到可以移动文件为止),但这似乎效率很低。

既然那行不通,我尝试使用计时器,该计时器每10秒检查一次文件夹,然后在可能的时候移动文件。这就是我最终想要的方法

问题:是否在没有完成异常检查或不连续比较大小的情况下写完文件的信号?我喜欢对每个文件只使用一次Watcher
API的想法,而不是不断使用计时器检查(并遇到异常)。

非常感谢所有回复!

nt


问题答案:

写入另一个文件以指示原始文件已完成。如果完成创建文件“ fileorg.done”并仅检查“ fileorg.done”,则“
fileorg.dat”会不断增长。

使用巧妙的命名约定,您应该不会有问题。



 类似资料:
  • 问题内容: 我在这里写的主要是关于从哪里开始的建议。我已经实现了一个类,该类将使用Java的WatchService递归监视目录。它可以很好地检测更改,但是我注意到了一个致命的缺陷:我无法删除包含正在监视的目录的正在监视的目录。这似乎是WatchService的限制。 我还稍微研究了Apache的VFS FileListener,但是在花了大约6个小时的时间来围绕它构建某种包装之前,我想也许我只是

  • 问题内容: 就像一个类似的SO问题一样,我正在尝试监视Linux机器上的目录以添加新文件,并希望在这些新文件到达时立即对其进行处理。关于实现此最佳方法的任何想法? 问题答案: 看inotify。 使用inotify,您可以监视用于文件创建的目录。

  • 问题内容: 我想在目录中监视来自C应用程序的新文件。但是,我对修改后的文件不感兴趣,仅对新文件感兴趣。目前,我为此目的使用readdir / stat: 知道如何在不保留文件列表的情况下检测 Linux和Solaris 10 上新创建的文件吗? 问题答案: 解决方案是将最后访问时间存储在全局变量中,并使用过滤器选择最新文件: : 统计信息(由路径扩展,但这仅是详细信息) 统计信息(由路径扩展,但这

  • 问题内容: 我正在使用WatchService来监视目录中的更改,尤其是在目录中创建新文件。下面是我的代码- 当我在“ mk”目录中创建文件时,我正在收到通知。但是,当我在此目录中复制某些文件时,打开该复制文件时出现异常。 我的猜测是Windows Copier对话框仍然锁定了该文件,而我无法打开该文件。因此,基本上我想知道是如何通知文件已被其他进程关闭。 上面代码的输出就像- 我已创建文件“ ”

  • 我需要监视多个文件夹以获取新文件通知。我尝试了一个目录,它工作得很好 我的文件夹结构类似于路径。获取(“c:\users\Test”);路径path1=路径。获取(“c:\users\test1”);路径路径2=路径。获取(“c:\users\test2”); 我尝试将每个目录注册到watcher。WatchKey key1=路径1。注册(观察者、条目和创建);WatchKey key2=路径2。

  • 问题内容: 这个问题已经在这里有了答案 : 如何查看文件中的更改? (25个答案) 7年前关闭。 我正在寻找一个跨平台的文件监视python包?我知道可以使用pywin32监视Windows上的文件,并且有可以在Linux / Unix上运行的软件包,但是有人知道跨平台的吗? 问题答案: 对于基于Unix / Linux的系统,您应该使用File Alteration Monitor Python