java - 通过java如何在不使用list()的情况下计算目录中的文件数

标签 java java-io

不使用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/

相关文章:

java - 读取任务中的文件

Java io.FileNotFoundException;有问题的可疑港口

java - 如何在更改底层 FileInputStream 的位置后重置 BufferedInputStream

java - GWT java.io.File 服务器包

java - Netbeans : Can not access instrumentation environment 中的大量在线分析

java - 如何实现循环输入

java - 为什么 Object 和 var 变量的行为不同?

java - 多选项卡式 map /切片级别编辑器中的CPU/内存效率(许多HashMaps/ArrayLists)

java - JAVA中的FileReader方法read()和read(char[])

java - 在 Java 中读取文件会抛出 `NullPointerException`