通过java如何计算没有列表的目录中的文件编号()

问题描述:

如果不使用file.list()Files.list(path),如何计算目录中的文件编号?通过java如何计算没有列表的目录中的文件编号()

我只想要一个号码,没有任何细节。请给我一个快捷的方式。

+1

请参阅[此重复问题](http://stackoverflow.com/q/687444/5743988)。如果你在那里找不到解决方案,可能是因为'list()'是最好的方法。 – 4castle

+0

我正在使用unix,那么你可以在java中使用unix“ls -1 | wc -l”tric – Razib

+2

不使用列表的原因是什么?该答案可能有助于为您提供正确的解决方案 – dganesh2002

如果您只关心不创建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基于这些图(路径)

​​

。使用dir.list().length似乎不是一个不好的解决方案。

+0

答案是正确的,它适合你的昵称:) – Vic