1

Windows で使用可能なディスク容量を確認したい。私のコードが移植可能でないことは気にしません。私はこれを使用します:

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

「dir C:」タイプの呼び出しからの結果を解析することを目指していますが、コマンドライン呼び出しから取得した文字列は、/Wオプションを指定して dir を呼び出した場合と同じです (ファイルサイズまたはディスク使用量/空き容量に関する情報は提供されません)。 . dir C:(コマンドラインから直接起動すると、期待どおりの結果が得られるためdir、システムに特別な設定はありません。)トークン/-Wまたは他のオプションを渡そうとしても機能しないようです。ドライブに含まれるフォルダー/ファイルが含まれますが、その他の情報は一切含まれません。

誰かが修正/回避策を知っていますか?

ノート:

はネットワーク ドライブでは機能しないため、fsutilルートをたどることができません。fsutil

4

3 に答える 3

3

exec()パスのどこかで「dir」というプログラムを見つけているようです。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 };
于 2009-08-07T12:47:01.477 に答える
1

移植性を気にしない場合は、Win32APIのGetDiskFreeSpaceExメソッドを使用してください。JNIとビオラを使ってラップしてください!

Javaコードは次のようになります。

public native long getFreeSpace(String driveName);

残りはここの例で行うことができます。JNIにはパフォーマンスの問題がありますが、Processクラスを使用することで耐えられるほどの苦痛を引き起こす可能性は低いと思います。

于 2009-08-07T12:57:38.157 に答える
0

Apache Commons には、クロスプラットフォームなどで動作するFileSystemUtils.freeSpaceKb()があります。

于 2011-05-14T20:32:47.443 に答える