我需要开发一个应用程序,一旦文件在预定义的目录中创建,将处理csv文件。
我已经看到在生产中使用Apache Commons IO File Monitoring的应用程序。它运行得很好。我见过它在一天内处理多达2100万个文件。Apache Commons IO File Monitoring似乎轮询目录并执行listFiles来处理文件。
我的问题:JDK WatchService是否与Apache Commons IO文件监控一样好?有人知道它的利弊吗?
自从我问了这个问题之后,我对这件事有了更多的了解。因此,我试图回答那些可能有类似问题的人。
Apache commons monitoring使用具有可配置轮询间隔的轮询机制。在每次轮询中,它调用File类的listFiles()方法,并与前一次迭代的listFiles()输出进行比较,以识别文件的创建、修改和删除。该算法足够健壮,我从未见过任何失误,即使是大容量的文件也能很好地工作。然而,由于它在每次迭代中轮询并调用listFiles,如果输入文件流入不多,它将消耗不必要的CPU周期。
JDK WatchService不需要轮询。它是基于事件的。它仅在事件发生时触发,因此如果输入文件流入不多,则需要较少的CPU。如果输入文件流入量很大,并且事件处理机制的处理速度低于事件发生的速度,则可能存在事件溢出的可能性。另外,它不能在网络驱动器上工作。
因此,总的来说,如果文件流入是连续的和巨大的,那么最好使用Apache file Monitoring。否则,JDK WatchService是一个不错的选择。