我想获得驱动器的大小(或指向分区的 UNC 路径会很好,但不是必需的),以及所述驱动器(或 UNC 路径)的可用空间。这不需要跨平台工作;仅在 Windows 中。
我知道在 Java 6 中很容易做到,但这不是一个选择;我被Java 5困住了。
我可以通过以下方式获得可用空间:
cmd.exe /c Z:\ /-c
或者
cmd.exe /c \\server\share /-c
并且只是免费解析出结果字节。但是我似乎找不到获得总驱动器大小的方法。
有什么建议么?
一种方法是在命令行上使用 fsutil。它返回如下内容:
D:\>fsutil fsinfo ntfsinfo c:
NTFS Volume Serial Number : 0xd49cf9cf9cf9ac5c
Version : 3.1
Number Sectors : 0x0000000004a813ff
Total Clusters : 0x000000000095027f
Free Clusters : 0x00000000002392f5
Total Reserved : 0x0000000000000490
Bytes Per Sector : 512
Bytes Per Cluster : 4096
Bytes Per FileRecord Segment : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length : 0x000000000e70c000
Mft Start Lcn : 0x00000000000c0000
Mft2 Start Lcn : 0x0000000000000010
Mft Zone Start : 0x0000000000624ea0
Mft Zone End : 0x0000000000643da0
将您的扇区数乘以每个扇区的字节数以获得您的大小。
如果您对此感到满意,则可以使用 JNI 调用轻松完成此操作...
如果您想要一个可与 JDK1.5 一起使用的预打包库,请查看Apache FileSystemUtils
这只是包装了您描述的系统调用,但至少它是一个您可以使用的标准库,直到您能够使用 1.6。
您可以使用SIGAR库,它可以让您在许多平台上进行本机访问。