通过 java 如何在没有 list() 的情况下计算目录中的文件数

By java how to count file numbers in a directory without list()

不使用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.list文件()

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 似乎是一个不错的解决方案。