Java:如何确定1.6之前的Windows系统上的磁盘空间

时间:2009-08-07 12:32:45

标签: java windows diskspace

我想确定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无法在网络驱动器上运行。

3 个答案:

答案 0 :(得分: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 };

答案 1 :(得分:1)

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

您的Java代码应如下所示:

public native long getFreeSpace(String driveName);

其余部分可以通过示例here完成。我认为虽然JNI存在性能问题,但使用Process类不太可能导致pain you'll endure的数量....

答案 2 :(得分:0)

Apache Commons有FileSystemUtils.freeSpaceKb()可以跨平台等工作