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