【发布时间】:2010-10-15 19:19:32
【问题描述】:
如何使用 Java 计算目录中的文件数?为简单起见,我们假设该目录没有任何子目录。
我知道的标准方法:
new File(<directory path>).listFiles().length
但这将有效地遍历目录中的所有文件,如果文件数量很大,这可能需要很长时间。另外,我不关心目录中的实际文件,除非它们的数量大于某个固定的大数字(比如 5000)。
我猜,但是目录(或者在 Unix 的情况下是它的 i 节点)不是存储其中包含的文件数吗?如果我可以直接从文件系统中获取该数字,它会快得多。在后端开始进行实际处理之前,我需要对 Tomcat 服务器上的每个 HTTP 请求进行此检查。因此,速度至关重要。
我可以每隔一段时间运行一个守护进程来清除目录。我知道,所以请不要给我那个解决方案。
【问题讨论】:
-
如果目录可能有大量文件(1000s+),那么您可能希望避免分配文件列表方法返回的数组。我还没有尝试过,但也许你可以使用 listFiles 并传递一个 FileFilter 实例,该实例在 accept 方法中对文件进行计数,同时为所有文件返回 false。我假设这避免了数组分配,同时仍然给你一个文件计数。
-
忽略我的最后评论...根据 JDK impl,无论如何都可能分配数组(在后台)。无论如何,在openjdk中似乎就是这种情况。
-
对于 Java 7 及更高版本,使用标准 Java API 可以很好地解决此问题。请参阅下面@mateuscb 的答案 - stackoverflow.com/questions/687444/…。
标签: java performance file directory