通过Java如何计算没有list()的目录中的文件编号

Fre*_*uvn 0 java java-io

不使用file.list()Files.list(path),如何计算目录中的文件编号?

我只想要一个数字,没有细节。请给我一个快速的方法。

Sub*_*mal 5

如果您唯一关心的是不创建List<File>,则可以使用Stream API

long count = Files.list(Paths.get(path))
        .filter(p -> p.toFile().isFile())
        .count();
System.out.println("count = " + count);
Run Code Online (Sandbox Code Playgroud)

编辑该片段并不意味着很快。仅提供了不使用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      
Run Code Online (Sandbox Code Playgroud)

以毫秒为单位的时间(逗号是千位分隔符)

下面是已执行命令的详细信息。

ls

ls -f /tmp/huge-dir | wc -l
Run Code Online (Sandbox Code Playgroud)

dir.list()

File hugeDir = new File("/tmp/huge-dir");
int numberFiles = hugeDir.list().length;
Run Code Online (Sandbox Code Playgroud)

dir.listFile()

File hugeDir = new File("/tmp/huge-dir");
int numberFiles = hugeDir.listFiles().length;
Run Code Online (Sandbox Code Playgroud)

Files.list(路径)

Path path = Paths.get("/tmp/huge-dir");
long numberFiles = Files.list(path)
        .filter(p -> p.toFile().isFile())
        .count();
Run Code Online (Sandbox Code Playgroud)

根据这些数字。使用dir.list().length似乎不是一个糟糕的解决方案。

  • 答案是正确的,并且符合您的昵称:) (2认同)