对于最近的项目,我需要从Windows上的Java中检测映射的Samba共享上的文件系统更改:创建,更新和删除。目前,我正在使用文件夹民意测验,该民意测验维护文件列表及其修改的时间戳以查找事件。
但是我的问题是,该文件夹轮询仅在特定时间(例如,每10秒钟)窥视该文件夹,因此更新的文件可以在两次轮询之间被两次更新而无法识别。
每当该mappep Samba共享上发生文件事件时,是否有任何方法可以从Java内部的Windows中获取事件?
谢谢!
最佳答案
Java在当前的IO api中没有任何内容可用于处理来自O / S的文件通知。
Java 7将具有一个新的IO API JSR-203,该API具有watch file API,它将使用本机O / S通知或在不支持通知来检测文件更改的情况下进行轮询。
同时,您可以查看是否有人实现了一个库,该库允许您通过JNI挂接到O / S通知。我认为IntelliJ IDEA为此目的使用了本地库。
在Sourceforge上查看,我找到了jfilenotify,但我从未使用过它。
或者,您可以增加采样频率(但这会开始影响文件系统),或者通过在文件名/文件夹中添加版本号来更改文件的写出方式,以便您可以轻松知道发生了什么更改。