Java:如何在1.6之前的Windows系统上确定磁盘空间
我想确定windows上的可用磁盘空间。我不在乎我的代码不可移植。我用这个:Java:如何在1.6之前的Windows系统上确定磁盘空间,java,windows,diskspace,Java,Windows,Diskspace,我想确定windows上的可用磁盘空间。我不在乎我的代码不可移植。我用这个: String[] command = {"dir",drive}; Process process = Runtime.getRuntime().exec(command); InputStream result = process.getInputStream(); 旨在解析“dir C:”类型调用的结果,但我从命令行调用中得到的字符串就好像我用/W选项调用了dir(没有提供任何关于文件大小或磁盘使用/可用空间的信
String[] command = {"dir",drive};
Process process = Runtime.getRuntime().exec(command);
InputStream result = process.getInputStream();
旨在解析“dir C:”类型调用的结果,但我从命令行调用中得到的字符串就好像我用/W
选项调用了dir(没有提供任何关于文件大小或磁盘使用/可用空间的信息)。(虽然当我直接从命令行启动dir C:
时,我得到了预期的结果,因此在我的系统上没有dir
特定的设置。)尝试传递令牌/-W
或任何其他选项似乎不起作用:我只得到驱动器中包含的文件夹/文件的名称,但没有其他任何信息
有人知道修复/解决方法吗
注意:
我不能沿着
fsutil
的路线走,因为fsutil
在网络驱动器上不工作。听起来你的exec()
在你的路径中的某个地方找到了一个名为“dir”的程序,因为如果你的String[/code>命令是这样的话,我会希望你得到一个IOException(系统找不到指定的文件)
。标准dir命令内置于cmd.exe命令提示符中,不是一个独立的程序,您可以自行执行
要运行内置于cmd.exe中的dir命令,您需要使用cmd.exe上的/c开关,该开关执行指定的命令,然后退出。因此,如果要执行:
cmd /c dir
要传递给exec的参数为:
String[] command = { "cmd", "/c", "dir", drive };
听起来您的exec()
在路径中的某个地方找到了一个名为“dir”的程序,因为使用String[/code>命令,否则我会希望您得到一个IOException(系统找不到指定的文件)
。标准dir命令内置于cmd.exe命令提示符中,不是一个独立的程序,您可以自行执行
要运行内置于cmd.exe中的dir命令,您需要使用cmd.exe上的/c开关,该开关执行指定的命令,然后退出。因此,如果要执行:
cmd /c dir
要传递给exec的参数为:
String[] command = { "cmd", "/c", "dir", drive };
如果您不关心可移植性,请使用Win32 API中的方法。使用JNI和viola包装它
您的Java代码应该如下所示:
public native long getFreeSpace(String driveName);
剩下的可以通过这个例子来完成。我认为,虽然JNI有其性能问题,但使用Process类不太可能造成大量的问题。…如果您不关心可移植性,请使用Win32 API中的方法。使用JNI和viola包装它
您的Java代码应该如下所示:
public native long getFreeSpace(String driveName);
其余的可以通过这个例子来完成。我认为,虽然JNI有其性能问题,但它不太可能通过使用Process类来产生大量的问题……Apache Commons有跨平台工作的etcApache Commons有跨平台工作的etc谢谢,伙计。我从Apache得到了解决方案e Commons IO,但不知道背后的解释。谢谢,伙计。我从Apache Commons IO获得了解决方案,但不知道背后的解释。或者使用JNA来避免JNI编译和设置的复杂性。-Java不支持0.5 Violas:-)或者使用JNA来避免JNI编译和设置的复杂性。-0.5 Violas不受Java支持:-)