2014-09-21 59 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 
相关问题