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

我想确定Windows上的可用磁盘空间。 我不在乎我的代码是不是可移植的。 我使用这个:

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

目的是parsing来自“dir C:”types的调用的结果,但是我从命令行调用得到的string就好像我用/W选项调用了dir(没有提供关于文件大小或磁盘使用的任何信息/ free空间)。 (尽pipe当我从命令行直接启动dir C:时,我得到了预期的结果,所以在我的系统上没有dir特定的设置。)尝试传递一个标记/-W或其他任何选项似乎都不起作用:我只是得到驱动器中包含的文件夹/文件的名称,但没有其他信息。

有人知道一个修复/解决方法?

注意:

我不能沿着fsutil路线走,因为fsutil在networking驱动器上不起作用。

这听起来像你的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 }; 

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

你的Java代码应该如下所示:

 public native long getFreeSpace(String driveName); 

其余的可以通过这里的例子来完成。 我认为,虽然JNI有它的性能问题,但是使用Process类不太可能导致你忍受的痛苦。

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