2012-10-29 129 views
5

我目前使用apache-commons FileUtils.sizeOfDirectory(File file)方法來獲取目錄的大小。我真正需要的是,在磁盤上的目錄的大小,在Unix下由du實用程序顯示的大小,只是要清楚。磁盤上的Java目錄大小?

是否有可能在Java中獲取此信息?

回答

8

du通過遍歷整個目錄樹並添加找到的所有文件的大小來查找此信息。 (將每個文件大小四捨五入到一個分配單元,我想,以及它如何發現分配單元是什麼,我不知道)。

你將不得不這樣做,或產生一個外部du進程爲你做。

+0

我不想派生du,因爲我需要的代碼是平臺無關的。我會嘗試着看看分配單元管理。謝謝 – Husker14

2

您需要遞歸搜索文件夾樹。

如果您使用的是Java 7,它非常快速。

Files.walkFileTree(file.toPath(), new SimpleFileVisitor<Path>(){ 
    @Override 
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 
     size += attrs.size(); 
     return super.visitFile(file, attrs); 
    } 
}); 

在Java 6中,您需要使用遞歸File.listFiles()手動檢查每個文件的大小。請注意,這是非常緩慢的。因此,如果您正在查看大量文件,則可能需要找到一個生成外部命令的解決方案。

+1

我不需要文件的大小(這是size()方法返回的大小),但文件在磁盤上佔用的空間(例如,10個字節的文件可能佔用32個字節)。 – Husker14

+0

啊我明白了。抱歉。在那裏誤解你。 – Nano

+1

這可能有助於:然後:http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system-information – Nano