不使用file.list()
或Files.list(path)
,如何统计目录中的文件数量?
我只想要一个数字,不需要详细信息。请给我一个快速的方法。
最佳答案
如果您唯一关心的是不创建 List<File>
您可以使用 Stream API
.
long count = Files.list(Paths.get(path))
.filter(p -> p.toFile().isFile())
.count();
System.out.println("count = " + count);
编辑 该代码段并不意味着速度很快。仅针对不使用list()
的要求提供。或listFiles()
。 ;-)
下面对计算包含 200 万个文件的目录中的文件数量的不同方法进行了小幅比较。
所有命令都会执行两次。第一次执行时删除了文件缓存,第二次执行紧随第一次执行之后。
| ls | dir.list() | dir.listFiles() | Files.list(path)
--------------+-------+------------+-----------------+------------------
dropped cache | 9,120 | 5,518 | 5,879 | 59,175
filled cache | 946 | 1,992 | 2,401 | 51,179
以毫秒为单位的时间(逗号是千位分隔符)
下面详细介绍了执行的命令。
ls
ls -f /tmp/huge-dir | wc -l
dir.list()
File hugeDir = new File("/tmp/huge-dir");
int numberFiles = hugeDir.list().length;
dir.listFile()
File hugeDir = new File("/tmp/huge-dir");
int numberFiles = hugeDir.listFiles().length;
Files.list(路径)
Path path = Paths.get("/tmp/huge-dir");
long numberFiles = Files.list(path)
.filter(p -> p.toFile().isFile())
.count();
基于这些数字。使用dir.list().length
看起来这不是一个糟糕的解决方案。
关于java - 通过java如何在不使用list()的情况下计算目录中的文件数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39715607/