我需要遍历给定文件夹(及其子文件夹)的所有文件并对每个文件执行一些操作。 我一直在寻找一种递归遍历所有文件的方法,并在 Apache Commons Io 中找到了一个解决方案: FileUtils.iterateFiles 它返回一个迭代器。 我检查了它是如何实现的,看到它遍历所有文件并将它们添加到一个集合中,然后为该集合返回一个迭代器。 好吧,这就是它的作用。这就是我要找的:)
但后来我想 - 首先收集所有文件然后循环遍历所有文件并执行我想要的是否有效? 或者我应该不收集它们,而只是在递归遍历中执行操作?
应该注意的是,我需要对文件执行的操作包括对它们的 IO 操作,这可能会失败。 此外,我正在遍历的文件夹和文件集可能达到 400 个文件夹或 5000 个文件左右,文件大小可能达到几千兆(同样,仅遍历文件时不那么相关但相关,因为我打算执行 IO 任务)。 .
有什么想法吗?
谢谢。
最佳答案
您应该开始在文件系统上导航,创建一个 Runnable/Callable 实现来实现您想要对这些文件执行的操作,并在找到的每个文件之前将其提交到 ThreadPool(您可以从 Executors 类中创建一个)。
在这种情况下,您可能应该使用固定的线程池并且大小可能会有所不同,您应该进行基准测试并查看处理文件的线程数量如何影响性能。
关于java - 我应该先收集文件然后执行任务还是应该边收集边执行任务?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8884960/