如何使用Java计算目录中的文件数?为了简单起见,假设该目录没有任何子目录。
我知道以下的标准方法:
new File(<directory path>).listFiles().length
但这将有效地遍历目录中的所有文件,如果文件数量很大,这可能会花费很长时间。另外,除非目录中的实际文件数大于某个固定的大数字(例如5000),否则我不关心目录中的实际文件。
我正在猜测,但是目录(或者在Unix中,它的i节点)是否不存储其中包含的文件数量?如果我可以直接从文件系统获取该数字,它将更快。在后端开始进行实际处理之前,我需要对Tomcat服务器上的每个HTTP请求进行此检查。因此,速度至关重要。
我可以不时地运行一个守护进程来清除目录。我知道,所以请不要给我那种解决方案。
这可能不适用于您的应用程序,但是您始终可以尝试进行本机调用(使用jni或jna),或者执行特定于平台的命令并读取输出,然后再返回list()。length。在* nix上,您可以执行ls -1a | wc -l(请注意-第一个命令用破折号-a,第二个命令用破折号-小写字母L)。不确定在Windows上适合什么- 可能只是a,dir然后寻找摘要。
ls -1a | wc -l
dir
在为此类问题烦恼之前,我强烈建议您创建一个包含大量文件的目录,然后看看list()。length是否确实花了太长时间。正如该博客作者所建议的那样,您可能不希望为此出汗。
我可能会自己接受Varkhan的回答。