2016-09-27 51 views
-1

如果不使用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

回答

2

如果您只關心不創建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

相關問題