我想确定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
无法在网络驱动器上运行。
答案 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()可以跨平台等工作