推荐使用 java.nio.file.FileStore(JDK 7+),精度更高、线程安全;File.getUsableSpace() 返回普通用户可写入的可用字节数。

Java 中获取磁盘剩余空间大小,推荐使用 java.io.File 或更现代的 java.nio.file.FileStore(JDK 7+),后者精度更高、线程安全且支持更多文件系统特性。
用 File 类获取(兼容老版本 JDK)
File 类的 getUsableSpace() 方法返回当前路径所在分区的**可用字节数**(即普通用户可写入的剩余空间),不是总剩余(getFreeSpace())或总容量(
)。注意:它只认路径所在的根分区,不校验路径是否存在。</p><ul><li>示例:获取 C 盘(Windows)或根目录(Linux/macOS)可用空间</li></ul><p><font color="#888"><pre class="brush:php;toolbar:false;">File root = new File("/"); // Linux/macOS<br>File root = new File("C:\"); // Windows<br>long usableBytes = root.getUsableSpace();<br>System.out.println("可用空间: " + usableBytes + " 字节");
用 FileStore 获取(推荐,JDK 7+)
通过 Files.getFileStore(Path) 获取 <code>FileStore 对象,再调用 getUsableSpace()。它能准确识别挂载点,对 LVM、Docker 卷、网络文件系统等支持更好,且结果与操作系统命令(如 df -h)一致。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
- 需捕获
IOException(如路径不可访问、权限不足) - 支持跨平台,无需硬编码盘符或根路径
try {<br> Path path = Paths.get("/home");<br> FileStore store = Files.getFileStore(path);<br> long usable = store.getUsableSpace();<br> System.out.printf("'%s' 可用空间: %.2f GB%n", path, usable / (1024.0 * 1024 * 1024));<br>} catch (IOException e) {<br> e.printStackTrace();<br>}
注意事项和常见问题
三种空间含义不同,务必按需选择:
- getUsableSpace():普通用户实际可写入的空间(已扣除 reserved blocks、quota 限制等)→ 最常用
- getFreeSpace():文件系统报告的“空闲块”数(可能含 root 保留空间)→ 一般不用
- getTotalSpace():文件系统总容量(格式化后大小)
- Windows 下多个盘符需分别构造
File("C:\")、File("D:\")等 - 容器或受限环境(如 Docker、Android)中可能因权限或挂载方式导致抛异常或返回 0
单位换算与格式化建议
原始结果是 long 类型字节数,建议转为 KB/MB/GB 并保留小数:
- 除以
1024L得 KB,1024L * 1024得 MB,1024L * 1024 * 1024得 GB - 避免用
Math.pow(1024, n)(浮点误差) - 可用
String.format("%.2f GB", bytes / 1024.0 / 1024 / 1024)

















