2012-04-04 94 views
4

我想通过java监控系统上选定目录的更改。我在java 7中对watchservice有点想法。但watchservice只返回发生更改事件(MODIFY,DELETE)的目录名称。 另一方面,我想要所有关于变化的信息,比如发生更改的用户,发生更改的时间等。通过Java监控文件系统更改

这就像是想读取NTFS文件系统上的更改日志。 Java中是否有其他方式可以异步记录这些更改? ...

在此先感谢。

回答

3

不知道,如果你要导入库添加到您的项目,但能力的commons-io的有可能会满足您的需求FileAlterationObserver:

http://commons.apache.org/io/api-release/org/apache/commons/io/monitor/FileAlterationObserver.html

+0

+1这是一个非常好的图书馆,当某些事情发生变化时他无法获得,但他不知道是谁做出的。 – 2012-04-04 09:30:25

+1

这是一个很好的图书馆。但它听起来它使用轮询技术,而我想为文件系统更改异步事件。无论如何,我会更多地探讨这个lib。是的,我有能力导入添加库。 – 2012-04-04 09:48:21

0

如果你只想得到通知符如果发生什么事情,您可以使用答案中发布的某个库。

如果你想自己做一个小例子(你只限于Windows),请看看这个article about Java Native Interface。使用ReadDirectoryChanges函数,您可以决定接收异步通知。

如果你真的需要知道世卫组织做出的改变然后...祝你好运!据我所知(仅适用于Windows),这不是一个简单的主题,因为Windows不保存这些信息。你可以通过JNI与Object Auditing得到它,但你必须启用它,它会减慢你的系统。有关详细信息,请参阅this post

+0

中提到的watchservice谢谢。提供的信息非常有帮助。其实我正在寻找JNI调用来做同样的事情,但你提到的NativeCall与我的要求非常匹配。 – 2012-04-04 10:22:38

+0

@Shailesh_B没有一个JNI调用来做到这一点,否则它将被列为JNI规范,并且如果没有一个本地的Windows API,它也不能完成。 – EJP 2012-04-05 00:06:30

+0

@EJP是的,“风险”是必须编写一个小的本地DLL来做一个暴露的“简单”C API的脏作业 – 2012-04-05 07:20:51