我正在尝试使用Java WatchEvent ENTRY_MODIFY来检查文件是否正在访问(即:读取,复制到剪贴板)。但是从文档和我做过的一个小测试用例中,该事件并没有被解雇。只有在文件发生变化时才会触发它。
我做错了吗?如果是这样,我如何监控文件系统上的文件?
答案 0 :(得分:1)
这不是直接内置到java中的。您最好的选择是跳转到本机操作系统解决方案。如果您想支持多个系统,这可能会很乏味。
如果您可以使用支持窗口,请查看THIS LINK。向下滚动到底部,查看类似的应用程序。您会对包含命令行界面的任何应用程序感兴趣。您需要做的是安装其中一个软件,然后使用Runtime.exec启动进程。您可能只是使用直接dll,但我没有资格告诉您哪个dll会提供该信息,或者它是否存在。如果你不想要第三方依赖,那么你可能想要查看它。
您将读取挂钩到Windows dll的进程的结果,并将告诉您文件当前是否已打开(See this link for more details)。您的应用程序必须提取数据(如果文件已打开,则始终询问应用程序)。它并不理想,但可能是一种潜在的解决方案。
答案 1 :(得分:0)
回答您正在访问(复制和读取)文件的定义,但是对于文件更改,有几个现有的API可用。 Here是监视文件更改的示例。
要检查文件是否已复制到剪贴板,您可以使用Clipboard#hasFiles()方法when content of clipboard modified。如果它返回true
,则文件被复制到剪贴板。
要检查当前正在读取的文件,您可以使用FileLock抽象类的实现来检查文件是否已锁定。它具有acquiredBy()方法,该方法返回当前持有锁定文件的通道。
答案 2 :(得分:0)
您可以尝试其他库来完成该任务,例如http://jnotify.sourceforge.net/ 或http://java.dzone.com/announcements/new-java-library-monitor-file后者特别代表:文件访问监控 - 当访问或修改日期更改时,您将能够收到有关事件的通知。< / em>