Apache Commons IO 文件监控与 JDK WatchService

Apache Commons IO File Monitoring vs. JDK WatchService

我需要开发一个应用程序,一旦文件在预定义目录中创建,它就会处理 csv 文件。预计会收到大量传入文件。

我见过在生产中使用 Apache Commons IO 文件监控的应用程序。它工作得很好。我见过它一天处理多达 2100 万个文件。似乎 Apache Commons IO 文件监控轮询目录并执行 listFiles 来处理文件。

我的问题: JDK WatchService 是否与 Apache Commons IO 文件监控一样好?有谁知道有什么优缺点吗?

自从我问了这个问题,我对这件事有了更多的了解。因此试图回答那些可能有类似问题的人。

Apache commons monitoring 使用具有可配置轮询间隔的轮询机制。在每次轮询中,它调用 File class 的 listFiles() 方法,并与上一次迭代的 listFiles() 输出进行比较,以识别文件的创建、修改和删除。该算法足够稳健,我从未见过任何失误。它适用于大量文件。但是,由于它在每次迭代中轮询和调用 listFiles,如果输入文件流入不多,它将消耗不必要的 CPU 周期。甚至可以在网络驱动器上工作。

JDK WatchService 不需要轮询。它是基于事件的。它仅在事件发生时触发,因此如果输入文件流入不是那么多,则需要更少的 CPU。如果输入文件流入很大,并且事件处理机制的处理速度低于事件发生的速度,则可能会发生事件溢出。此外,它不适用于网络驱动器。

因此,总而言之,如果文件流入是连续且巨大的,最好选择 Apache 文件监控。否则,JDK WatchService 是一个不错的选择。