4

我想通过 java 监视系统上选定目录的更改。我对 java 7 中的watchservice有一点了解。但是 watchservice 只返回发生更改事件(修改、删除)的目录名称。另一方面,我想要有关更改的所有信息,例如进行更改的用户、更改发生的时间等。

这有点像想阅读 NTFS 文件系统上的更改日志。Java中是否有其他方法可以异步记录此类更改?...

提前致谢。

4

4 回答 4

3

如果您使用的是 java7,请查看java.nio.file.FileSystemWatchService

有关更多信息,请参阅Oracle 教程

于 2012-04-04T09:30:51.530 回答
3

不确定您是否有能力将导入库添加到您的项目中,但 commons-io 有一个 FileAlterationObserver 可能适合您的需求:

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

于 2012-04-04T09:27:09.730 回答
0

如果您只想在发生某些事情时得到通知,您可以使用答案中发布的库之一。

如果您想自己使用一个小示例(并且仅限于 Windows),请查看有关 Java Native Interface 的这篇文章。使用ReadDirectoryChanges函数,您可以决定接收异步通知。

如果你真的需要知道谁做了这些改变,那么......祝你好运!据我所知(仅适用于 Windows),这不是一个简单的主题,因为 Windows 不会保存该信息。您可以通过带有对象审计的 JNI 获得它,但您必须启用它,它会稍微减慢您的系统速度。看看这篇文章了解一些细节。

于 2012-04-04T10:03:52.143 回答
0

您可能会发现事件编程示例:Google Guava EventBus 和 Java 7 WatchService很有用。我也在尝试进行异步文件监视,并且可能会使用它的一些衍生物。

或者,如果您愿意跳过对 WatchService 的直接管理,请尝试使用 Camel 文件端点

于 2013-07-12T17:31:19.087 回答