我想通过java监控系统上选定目录的更改。我在java 7中对watchservice有点想法。但watchservice只返回发生更改事件(MODIFY,DELETE)的目录名称。 另一方面,我想要所有关于变化的信息,比如发生更改的用户,发生更改的时间等。通过Java监控文件系统更改
这就像是想读取NTFS文件系统上的更改日志。 Java中是否有其他方式可以异步记录这些更改? ...
在此先感谢。
我想通过java监控系统上选定目录的更改。我在java 7中对watchservice有点想法。但watchservice只返回发生更改事件(MODIFY,DELETE)的目录名称。 另一方面,我想要所有关于变化的信息,比如发生更改的用户,发生更改的时间等。通过Java监控文件系统更改
这就像是想读取NTFS文件系统上的更改日志。 Java中是否有其他方式可以异步记录这些更改? ...
在此先感谢。
不知道,如果你要导入库添加到您的项目,但能力的commons-io的有可能会满足您的需求FileAlterationObserver:
http://commons.apache.org/io/api-release/org/apache/commons/io/monitor/FileAlterationObserver.html
如果您正在使用java7看看 java.nio.file.FileSystem 和 WatchService
更多信息请参考 Oracle tutorial
+1为“开箱即用”解决方案:) – quaylar 2012-04-04 09:36:14
但我已经通过问题 – 2012-04-04 10:50:46
如果你只想得到通知符如果发生什么事情,您可以使用答案中发布的某个库。
如果你想自己做一个小例子(你只限于Windows),请看看这个article about Java Native Interface。使用ReadDirectoryChanges函数,您可以决定接收异步通知。
如果你真的需要知道世卫组织做出的改变然后...祝你好运!据我所知(仅适用于Windows),这不是一个简单的主题,因为Windows不保存这些信息。你可以通过JNI与Object Auditing得到它,但你必须启用它,它会减慢你的系统。有关详细信息,请参阅this post。
中提到的watchservice谢谢。提供的信息非常有帮助。其实我正在寻找JNI调用来做同样的事情,但你提到的NativeCall与我的要求非常匹配。 – 2012-04-04 10:22:38
@Shailesh_B没有一个JNI调用来做到这一点,否则它将被列为JNI规范,并且如果没有一个本地的Windows API,它也不能完成。 – EJP 2012-04-05 00:06:30
@EJP是的,“风险”是必须编写一个小的本地DLL来做一个暴露的“简单”C API的脏作业 – 2012-04-05 07:20:51
您可能会发现Event Programming Example: Google Guava EventBus and Java 7 WatchService有用。我正在尝试执行异步文件监视,并且可能会使用此的一些衍生工具。
或者,如果您愿意跳过对WatchService的直接管理,请提供Camel file endopoint a try。
+1这是一个非常好的图书馆,当某些事情发生变化时他无法获得,但他不知道是谁做出的。 – 2012-04-04 09:30:25
这是一个很好的图书馆。但它听起来它使用轮询技术,而我想为文件系统更改异步事件。无论如何,我会更多地探讨这个lib。是的,我有能力导入添加库。 – 2012-04-04 09:48:21