2009-08-07 30 views
1

我想確定Windows上的可用磁盤空間。我不在乎我的代碼不可移植。我用這個:Java:如何確定1.6之前的Windows系統上的磁盤空間

String[] command = {"dir",drive}; 
Process process = Runtime.getRuntime().exec(command); 
InputStream result = process.getInputStream(); 

旨在從分析結果「DIR C:」呼叫類型,但我在命令行調用獲取字符串是因爲如果我叫DIR與/W選項(不給有關文件大小或磁盤使用情況/可用空間的任何信息)。 (儘管當我直接從命令行啓動dir C:時,我得到了預期的結果,因此在我的系統上沒有dir特定設置。)嘗試傳遞令牌/-W或其他任何選項似乎都不起作用:我只是獲取驅動器中包含的文件夾/文件的名稱,但沒有其他信息。

有人知道修補程序/解決方法嗎?

注:

我不能沿fsutil路線走,因爲fsutil沒有網絡驅動器上運行。

回答

3

這聽起來像你exec()是找到一個名爲「目錄」的地方在你的路徑計劃,因爲你String[] command,因爲它是我本來希望你得到一個IOException (The system cannot find the file specified)。標準dir命令內置於cmd.exe命令提示符中,不是您可以自行執行的獨立程序。

要運行cmd.exe中內置的dir命令,您需要使用執行指定命令的cmd.exe上的/ c開關,然後退出。所以,如果你想執行:

cmd /c dir 

您的參數傳遞給exec是:

String[] command = { "cmd", "/c", "dir", drive }; 
+0

感謝隊友。我從Apache Commons IO獲得瞭解決方案,但不知道背後的解釋。 – glmxndr 2009-08-07 12:56:34

1

如果你不關心的可移植性,請從Win32 API中的GetDiskFreeSpaceEx方法。用JNI和中提琴把它包起來!

你的Java代碼應該是這樣的:

public native long getFreeSpace(String driveName); 

,其餘可通過例如here來完成。我認爲,雖然JNI有它的性能問題,它不太可能通過使用Process類引起的pain you'll endure量....

+1

或者使用JNA來避免JNI編譯和設置的複雜性。 – 2009-08-07 13:20:53

+0

太棒了,不知道JNA! – 2009-08-07 13:32:44

+0

-0.5 Violas不支持Java :-) – 2009-08-07 13:44:28

相關問題