一尘不染

使用Java计算目录中的文件数

java

如何使用Java计算目录中的文件数?为了简单起见,假设该目录没有任何子目录。

我知道以下的标准方法:

new File(<directory path>).listFiles().length

但这将有效地遍历目录中的所有文件,如果文件数量很大,这可能会花费很长时间。另外,除非目录中的实际文件数大于某个固定的大数字(例如5000),否则我不关心目录中的实际文件。

我正在猜测,但是目录(或者在Unix中,它的i节点)是否不存储其中包含的文件数量?如果我可以直接从文件系统获取该数字,它将更快。在后端开始进行实际处理之前,我需要对Tomcat服务器上的每个HTTP请求进行此检查。因此,速度至关重要。

我可以不时地运行一个守护进程来清除目录。我知道,所以请不要给我那种解决方案。


阅读 238

收藏
2020-09-08

共1个答案

一尘不染

这可能不适用于您的应用程序,但是您始终可以尝试进行本机调用(使用jni或jna),或者执行特定于平台的命令并读取输出,然后再返回list()。length。在*
nix上,您可以执行ls -1a | wc -l(请注意-第一个命令用破折号-a,第二个命令用破折号-小写字母L)。不确定在Windows上适合什么-
可能只是a,dir然后寻找摘要。

在为此类问题烦恼之前,我强烈建议您创建一个包含大量文件的目录,然后看看list()。length是否确实花了太长时间。正如该博客作者所建议的那样,您可能不希望为此出汗。

我可能会自己接受Varkhan的回答。

2020-09-08