1

我想监视一个目录,当一个文件出现在那里打开它,处理它,然后将它移动到另一个目录。问题是如何检查其他程序是否已完成编写。在 Java 7 中,我可以使用 FileSystem 中的 WatchService,但我只能检查文件的创建时间。我想知道何时释放所有文件句柄。

我的第一个想法是我可以获得一个排他锁,但事实证明可以在另一个应用程序实际更新文件时踢出它。

在 Java 中执行此操作的首选方法是什么?谢谢!

4

2 回答 2

1

Watcher API 当前允许您查看在被监视目录中创建、修改或删除文件系统对象时的事件。他们不会告诉您其他 inotify 事件(在 Linux 上)。事实上,我认为在纯 Java 中没有办法做到这一点。


几周前,我自己在寻找一种方法来执行此操作,我遇到了一个邮件线程,该线程建议您可以编写FileSystemapi 的自定义实现,该实现提供支持其他文件系统事件的文件观察器。我决定不追求它,因为我有一个替代解决方案......基于我正在观看的文件的制作方式的知识。

就我而言,这些文件是由将图像文件保存到共享驱动器的仪器生成的。解决方案是查看新创建文件的“修改”事件流。当它停止并且在几秒钟内(“稳定时间”)不再出现​​时,就可以处理文件了。

如果该解决方案被证明不可靠,则后备方案是直接使用 inotify 调用在 C/C++ 中实现监视和初始处理(获取文件的快照)。这将允许我直接观察文件关闭事件。

于 2011-12-27T09:35:11.570 回答
1

基于文件的接口最简单的方法是:

  1. 发件人使用更改的文件名写入文件(例如“example.xml_”)
  2. 当发件人完成文件的写入后,他将其重命名(例如“example.xml_”到“example.xml”)
  3. 接收方仅扫描“*.xml”
于 2012-01-03T11:45:00.750 回答