我想确定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() ,可以跨平台工作等等