如何使用Java计算目录中的文件数?为简单起见,我们假设该目录没有任何子目录。
我知道以下的标准方法:
new File(<directory path>).listFiles().length
但这将有效地遍历目录中的所有文件,如果文件数量很大,这可能需要很长时间。此外,我并不关心目录中的实际文件,除非它们的数量大于某个固定的大数字(比如5000)。
我在猜测,但是目录(或者在Unix中是它的i-node )不存储其中包含的文件数量吗?如果我能直接从文件系统中得到这个数字,它会快得多。在后端开始进行真正的处理之前,我需要对Tomcat服务器上的每个HTTP请求执行此检查。因此,速度是最重要的。
我可以每隔一段时间运行一个守护进程来清除目录。我知道,所以请不要给我那个解决方案。
发布于 2009-03-27 12:57:38
这可能不适合您的应用程序,但是您始终可以尝试本机调用(使用jni或jna),或者在返回到list().length之前执行特定于平台的命令并读取输出。在*nix上,您可以执行ls -1a | wc -l
(注意,第一个命令是破折号-one-a,第二个命令是破折号-lowercase-L)。不确定在windows上什么是正确的-也许只是一个dir
,然后查找摘要。
在考虑这类事情之前,我强烈建议您创建一个包含大量文件的目录,看看list().length是否真的需要太长时间。正如this blogger所建议的,您可能不想为此费心。
我自己可能会同意Varkhan的回答。
发布于 2009-03-26 20:39:07
啊..。在Java中没有直接的方法来做到这一点的理由是文件存储抽象:一些文件系统可能没有目录中随时可用的文件数量……该计数甚至可能没有任何意义(例如,请参阅分布式、P2P文件系统、将文件列表存储为链表的文件系统或数据库支持的文件系统……)。所以,是的,
new File(<directory path>).list().length
可能是你最好的选择。
发布于 2009-03-26 20:34:50
不幸的是,我相信这已经是最好的方式了(尽管list()
。
https://stackoverflow.com/questions/687444
复制相似问题