25

我正在寻找一个可以通知我有关文件系统更改的 Java 库。

我找到了一些免费的库,但它们都使用暴力检测,即定期轮询。其他的总是商业的。

我正在寻找的是一个库,它使用来自操作系统的文件监视器功能,即 Win32的FindFirstChangeNotification 、Linux 的FAM以及其他操作系统上可用的任何东西。我不介意是否使用蛮力作为后备,但对于 Windows 和 Linux,它应该使用可用的操作系统功能。

4

5 回答 5

25

JNotify似乎可以满足您的要求。

轮询文件系统(例如,更新时间更改的目录)不会给您的系统带来很大的负载,也不应该打折扣。Tomcat 等应用程序使用它来管理热部署,几乎没有问题。

现在帮助不大,但即将推出的 Java 7正好为此提供了WatchService 。

于 2009-07-08T08:44:29.827 回答
7

如果您对 Java 最前沿的工作感到满意,请查看JSR 203:更多新 I/O API又名 nio2,它将于Java 7中发布。

一个新的文件系统接口,支持批量访问文件属性、更改通知、转义到特定于文件系统的 API,以及用于可插拔文件系统实现的服务提供者接口;

于 2009-07-08T08:50:38.100 回答
6

jpathwatch是另一种选择。它实现了 Java 7 的用于目录监控的 API,因此如果需要,很容易移植到 Java 7。

于 2010-07-01T06:13:43.103 回答
4

为什么它必须是Java?

将使用平台特定 API 的库必须具有本机代码,因此本质上该库将封装本机代码,从而使不同 API 的使用变得透明。

我建议如果您没有找到自己的库,那么您将不得不在调用它时使用蛮力,或者使用每个平台的 JNI 调用本机 API。

于 2009-07-08T06:40:39.297 回答
0

目前使用轮询的另外两个选项:

但是,由于这两个项目都有大型活跃社区,因此它们可能会在未来进行更新以支持 Java 7 WatchService ( FileSystem.newWatchService() ),它确实使用了底层平台的通知工具(如果有的话)。

这两个库还提供了一个有用的抽象层,用于与各种其他传输和系统集成,因此您的主应用程序代码不依赖于从文件系统接收的输入。

于 2012-08-23T15:29:47.233 回答