不使用file.list()
或Files.list(path)
,如何计算目录中的文件编号?
我只想要一个数字,没有细节。请给我一个快速的方法。
答案 0 :(得分:4)
如果您唯一关心的是不创建List<File>
,则可以使用Stream API
。
long count = Files.list(Paths.get(path))
.filter(p -> p.toFile().isFile())
.count();
System.out.println("count = " + count);
编辑该片段并不意味着速度快。只有在不使用list()
或listFiles()
的情况下才会提出要求。 ; - )
对包含两百万个文件的目录中的文件数量的不同计算方法进行了一些小比较。
所有命令都执行两次。第一次执行是删除文件缓存,第二次执行紧跟在第一次执行之后。
| 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
似乎并不是一个糟糕的解决方案。