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

如果您不关心可移植性,请使用 Win32 API 中的GetDiskFreeSpaceEx方法。使用 JNI 和 viola 包装它!

您的 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 回答