更新:
我對誤讀的問題道歉,我建議複製FileSystemUtils的方法,但修改它稍微運行的命令。
在DOS下你可以用fsutil命令的自由和總字節數:
fsutil volume diskfree [drive letter]
在我的箱子此得出以下結果:
Total # of free bytes : 41707524096
Total # of bytes : 80023715840
Total # of avail free bytes : 41707524096
在Unix上,命令仍然「 df -k「,你只是對」Free「左邊的」1024-blocks「列感興趣(例如下面的維基百科)。你顯然需要乘以1024的結果。
Filesystem 1024-blocks Free %Used Iused %Iused Mounted on
/dev/hd4 32768 16016 52% 2271 14%/
/dev/hd2 4587520 1889420 59% 37791 4% /usr
/dev/hd9var 65536 12032 82% 518 4% /var
/dev/hd3 819200 637832 23% 1829 1% /tmp
/dev/hd1 524288 395848 25% 421 1% /home
/proc - - - - - /proc
/dev/hd10opt 65536 26004 61% 654 4% /opt
假設你複製FileSystemUtils實行 「totalSpaceKB()」 委託給一個等效比OS-方法。用於Windows的實現將是這樣的(注意使用「查找」從FSUTIL調整輸出只得到總規模):
用於Unix的實施將是相同的freeSpaceUnix()的,但在該方法
/** comment these two lines so the token received is the total size */
tok.nextToken(); // Ignore 1K-blocks
tok.nextToken(); // Ignore Used
/** this will now be the total size */
String freeSpace = tok.nextToken();
return parseBytes(freeSpace, path);
}
其他平臺的實現將是相似的端部除去兩次調用tok.nextToken()。
希望這有助於並理解誤解問題。
原始答案(獲得可用字節數,不是總數)。
在Java 6之前,沒有一種優雅的方式可以做到這一點(請參閱bug)。我建議使用一個庫來爲您執行特定於平臺的處理,而不是自己動手。
Apache commons-io有一個FileSystemUtils類型,它提供了一個靜態方法freeSpaceKb()。它適用於Windows和一些Unix實現(請參閱下面的Javadoc報價)
從的Javadoc:
公共靜態長freeSpaceKb(字符串路徑) 拋出IOException異常
在返回的自由空間調用命令行以千字節爲單位的驅動器或卷。 FileSystemUtils.freeSpaceKb(「C:」); // Windows FileSystemUtils.freeSpaceKb(「/ volume」); // * nix
可用空間通過命令行進行計算。它在Windows上使用'dir/-c',在AIX/HP-UX上使用'df -kP',在其他Unix上使用'df -k'。 爲了工作,您必須運行Windows,或者在傳遞-k(或-kP)時有一個支持GNU格式的Unix df實現。如果您要依賴此代碼,請通過運行一些簡單的測試來比較命令行與此類的輸出來檢查它是否適用於您的操作系統。如果您的操作系統不受支持,請提出JIRA調用,詳細介紹df -k的確切結果以及儘可能多的其他細節,謝謝。
我在問題中提到的Apache的commons-io的。我正在尋找* total *磁盤空間。 – 2009-08-10 10:21:52