我需要开发一个将在预定义目录中创建csv文件的应用程序。预计会有大量的传入文件。
我在产品中看到了使用Apache Commons IO File Monitoring的应用程序。效果很好。我看到它一天可以处理多达2100万个文件。似乎Apache Commons IO文件监视会轮询目录并执行listFiles以处理文件。
我的问题:与Apache Commons IO文件监视一样,JDK WatchService是否是一个不错的选择?有人知道任何利弊吗?
自从我问这个问题以来,我对这个问题有了更多的了解。因此,尝试为可能有类似问题的人回答。
Apache Commons Monitoring使用具有可配置轮询间隔的轮询机制。在每次轮询中,它都会调用File类的listFiles()方法,并与上一次迭代的listFiles()输出进行比较,以识别文件的创建,修改和删除。该算法足够强大,我从未见过任何遗漏。它甚至可以处理大量文件。但是,由于它在每次迭代中轮询并调用listFiles,因此如果输入文件的流入量不大,它将消耗不必要的CPU周期。即使在网络驱动器上也可以使用。
JDK WatchService不需要轮询。它是基于事件的。仅当事件发生时才触发它,因此如果输入文件流入不那么多,则需要更少的CPU。如果输入文件流入量很大,并且事件处理机制以比发生事件的速率低的速率进行处理,则可能会发生事件溢出。此外,它不适用于网络驱动器。
因此,总而言之,如果文件流入是连续不断的并且很大,那么最好使用Apache File Monitoring。否则,JDK WatchService是一个不错的选择。