推荐使用 java.nio.file.FileStore 获取磁盘容量,通过 Files.getFileStore(path) 获取 FileStore 对象,调用 getTotalSpace()、getUsableSpace()、getUnallocatedSpace() 方法获取总容量、可用空间和未分配空间;可遍历 FileSystems.getDefault().getFileStores() 获取所有挂载点,并过滤虚拟文件系统。

Java 中可以通过 java.io.File 或更推荐的 java.nio.file.FileStore 获取文件系统的总容量与可用空间。后者是 Java 7 引入的 NIO.2 API,功能更准确、跨平台兼容性更好,支持多文件系统(如多个挂载点)和符号链接等细节。
使用 FileStore(推荐方式)
通过 Files.getFileStore(Path) 获取指定路径所在文件系统的 FileStore 对象,再调用其容量相关方法:
-
getTotalSpace():返回总字节数(long 类型) -
getUsableSpace():返回当前用户可用字节数(考虑权限和预留空间) -
getUnallocatedSpace():返回未分配字节数(不一定等于可用空间,例如 ext4 有 reserved blocks)
示例代码:
import java.io.IOException;
import java.nio.file.*;
<p>public class DiskSpace {
public static void main(String[] args) {
try {
Path path = Paths.get("/"); // 可替换为任意路径,如 "C:\" 或 new File(".").toPath()
FileStore store = Files.getFileStore(path);
long total = store.getTotalSpace();
long usable = store.getUsableSpace();
System.out.printf("总容量: %.2f GB%n", total / (1024.0 <em> 1024 </em> 1024));
System.out.printf("可用空间: %.2f GB%n", usable / (1024.0 <em> 1024 </em> 1024));
} catch (IOException e) {
e.printStackTrace();
}
}
}遍历所有文件系统(获取全部挂载点信息)
如果需要查看本机所有文件存储(如 Linux 的 /、/home、/boot;Windows 的 C:\、D:\),可用 FileSystems.getDefault().getFileStores():
立即学习“Java免费学习笔记(深入)”;
- 返回
Iterable<filestore></filestore>,可遍历每个挂载点 - 注意过滤掉虚拟文件系统(如
proc、sysfs、devtmpfs),它们不提供真实磁盘容量 - 可通过
store.name()和store.type()判断类型
常见过滤建议:!type.equals("proc") && !type.equals("sysfs") && !name.contains("docker")
兼容旧版 Java(File 方式,仅限单路径)
Java 6 及以前只能用 File 类的以下方法(不推荐新项目使用):
file.getTotalSpace()-
file.getFreeSpace()(对应 FileStore 的 unallocated,非真正可用) -
file.getUsableSpace()(Java 7+ 才有,行为同 FileStore.getUsableSpace)
注意:getFreeSpace() 在某些系统上可能返回 0 或不准确值,尤其在启用了磁盘配额或存在 reserved blocks 时;getUsableSpace() 更贴近用户实际能写入的空间。
注意事项与常见问题
获取容量时需留意以下几点:
- 路径必须存在且可访问,否则抛出
IOException - 某些容器环境(如 Docker)中,
/可能是 overlayfs,FileStore返回的是底层宿主机设备容量 - Windows 下若路径指向网络驱动器(如 Z:\),需确保已映射且在线,否则可能抛异常或返回 0
- 单位统一用字节,自行转换为 KB/MB/GB 时注意用
1024.0而非1000(二进制单位)
不复杂但容易忽略。


















