Java:如何在1.6之前的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(没有提供任何关于文件大小或磁盘使用/可用空间的信

我想确定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
在网络驱动器上不工作。

听起来你的
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有跨平台工作的etc

Apache Commons有跨平台工作的etc

谢谢,伙计。我从Apache得到了解决方案e Commons IO,但不知道背后的解释。谢谢,伙计。我从Apache Commons IO获得了解决方案,但不知道背后的解释。或者使用JNA来避免JNI编译和设置的复杂性。-Java不支持0.5 Violas:-)或者使用JNA来避免JNI编译和设置的复杂性。-0.5 Violas不受Java支持:-)