Java - 检查其他程序是否读取文件?

Java - Check if other programs read a file?

我能以某种方式检查另一个程序是否读取指定文件吗?

我想让我的程序监控一个文件,每当它被另一个程序访问时,它应该 运行 一些代码。这可能吗?

正如一些人提到的,Java 新 IO 为您提供观看 directory/files 一些活动的机会:

  • ENTRY_CREATE – 创建目录条目。
  • ENTRY_DELETE – 目录条目被删除。
  • ENTRY_MODIFY – 目录条目被修改。
  • OVERFLOW – 表示事件可能已丢失或丢弃。您无需注册 OVERFLOW 事件即可接收它。

但是,如您所见,它不允许您检测文件是否已被访问。如果你真的想这样做,你将不得不编写一些本机代码。

在 windows 上,您可以使用 Handle 列出访问文件的人员。我相信您可以从 java 程序(假设每隔几分钟)调用此命令,然后从输出中检测是否使用了该文件。

我很确定还有其他选择 OS。

BasicFileAttributes 接口提供最后访问时间。但它无法告诉您哪个程序访问了它。正如其他人所提到的,WatchService 也会做同样的事情,但您可以通过从这些程序中记录日志来实现您想要做的事情,然后检查这些日志以确定下一步该做什么。