我正在寻找一个可以通知我有关文件系统更改的 Java 库。
我找到了一些免费的库,但它们都使用暴力检测,即定期轮询。其他的总是商业的。
我正在寻找的是一个库,它使用来自操作系统的文件监视器功能,即 Win32的FindFirstChangeNotification 、Linux 的FAM以及其他操作系统上可用的任何东西。我不介意是否使用蛮力作为后备,但对于 Windows 和 Linux,它应该使用可用的操作系统功能。
我正在寻找一个可以通知我有关文件系统更改的 Java 库。
我找到了一些免费的库,但它们都使用暴力检测,即定期轮询。其他的总是商业的。
我正在寻找的是一个库,它使用来自操作系统的文件监视器功能,即 Win32的FindFirstChangeNotification 、Linux 的FAM以及其他操作系统上可用的任何东西。我不介意是否使用蛮力作为后备,但对于 Windows 和 Linux,它应该使用可用的操作系统功能。
JNotify似乎可以满足您的要求。
轮询文件系统(例如,更新时间更改的目录)不会给您的系统带来很大的负载,也不应该打折扣。Tomcat 等应用程序使用它来管理热部署,几乎没有问题。
现在帮助不大,但即将推出的 Java 7正好为此提供了WatchService 。
如果您对 Java 最前沿的工作感到满意,请查看JSR 203:更多新 I/O API又名 nio2,它将于Java 7中发布。
一个新的文件系统接口,支持批量访问文件属性、更改通知、转义到特定于文件系统的 API,以及用于可插拔文件系统实现的服务提供者接口;
jpathwatch是另一种选择。它实现了 Java 7 的用于目录监控的 API,因此如果需要,很容易移植到 Java 7。
为什么它必须是Java?
将使用平台特定 API 的库必须具有本机代码,因此本质上该库将封装本机代码,从而使不同 API 的使用变得透明。
我建议如果您没有找到自己的库,那么您将不得不在调用它时使用蛮力,或者使用每个平台的 JNI 调用本机 API。
目前使用轮询的另外两个选项:
但是,由于这两个项目都有大型活跃社区,因此它们可能会在未来进行更新以支持 Java 7 WatchService ( FileSystem.newWatchService() ),它确实使用了底层平台的通知工具(如果有的话)。
这两个库还提供了一个有用的抽象层,用于与各种其他传输和系统集成,因此您的主应用程序代码不依赖于从文件系统接收的输入。