2014-09-21 38 views
1

我寫了一些java代碼,它使用dir.listFiles().length;獲取目錄中文件的數量。命令ls -l | wc給了我一個不同的數字。我相信這兩個命令都會跳過隱藏的目錄。造成不同數字的原因是什麼?Java的dir.listFiles()和* .nix的ls之間有什麼區別?

+1

只是要知道,哪一個是正確的? – 2014-09-21 16:05:04

+0

那麼,這個目錄有近2000個文件,所以我不能確定。對於包含較少文件的目錄,這些程序似乎報告了合適的總數。 – user465001 2014-09-21 16:09:33

+0

不同之處在於'ls -l'返回一個額外的行(它表示類似於:'Total:#####') – Barranka 2014-09-21 16:09:57

回答

2
ls -l | wc 

計數行ls -l輸出,與單個文件的目錄中它仍然會輸出2線,這並不意味着它的數目有2個文件目錄

+0

謝謝Jigar。僅使用ls仍會返回不同的數字。另外,我創建了一個帶有一個文件的目錄,並且'ls | wc'報告'1 1 4' – user465001 2014-09-21 16:21:13

+0

如果您想要從Java獲取使用Java方式的文件數 – 2014-09-21 16:23:54

0

內從man wc

wc - print newline, word, and byte counts for each file. 

當命令ls -l | wc給出類似於3 7 15的輸出時,wc表明輸入中有3個換行符,7個字和15個字符(字節)(輸出ls -l)。 3個換行符表示有3個文件,因爲ls -l用換行符列出每個文件。

另一方面,Java中的dir.listFiles().length是由dir.listFiles()方法返回的File數組長度,這個方法的確是dir中的文件數。

如果從wc希望類似的結果,通過-lines或者乾脆-l選項,只打印換行符計數:

ls -l | wc -l   

最重要的,則dir.listFiles()將列出所有在dir包括隱藏文件其中ls沒有默認列表。爲了與Java的結果一致,請使用:

ls -la | wc -l 
相關問題