推荐使用Files.getFileStore()获取分区空间,需检查路径有效性、捕获IOException,并对返回的字节值做非正数校验与单位换算;java.io.File适用于根驱动器快速查询,但不支持符号链接真实挂载点。

直接调用 FileStore 或 File 对象的空间方法即可,但必须处理路径有效性、权限异常和单位换算,否则容易返回 0 或抛异常。
用 Files.getFileStore() 获取分区空间(推荐,NIO.2)
适用于任意路径(文件或目录),自动定位其所在物理分区,尤其适合跨挂载点或符号链接场景:
- 先确保路径存在且可访问:
Paths.get("/path/to/file"),不能是末尾多斜杠的无效路径(如/home//) - 调用
Files.getFileStore(path)得到FileStore实例;若路径不可达,会抛IOException -
getTotalSpace()返回总字节数(含系统保留块) -
getUsableSpace()返回当前 JVM 进程可用字节数(已扣除用户配额、root 预留块等,Linux/macOS 下通常比getUnallocatedSpace()小) -
getUnallocatedSpace()是文件系统未分配的原始空闲字节,不等于用户可用量
用 java.io.File 获取驱动器级空间(简单兼容)
适合快速查根分区(如 C:、/),无需路径存在检查,但无法反映符号链接的真实挂载点:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 构造
File disk = new File("C:\")或new File("/") -
getTotalSpace():总容量(字节) -
getFreeSpace():未分配字节数(类似df的Avail列,不含配额限制) -
getUsableSpace():当前用户/JVM 可写入字节数(最贴近真实可用值) - 注意:
getFreeSpace()和getUsableSpace()在 Windows 上基本一致;Linux/macOS 中后者更保守
安全处理与单位转换要点
所有空间方法都返回 long 字节值,需自行转为 KB/MB/GB,且必须防范除零和负值:
- 检查返回值是否 ≤ 0 —— 常见于无权限、路径不存在、或 NFS 挂载失败等情况
- 避免直接除
1024^3简单换算 GB,建议用循环或BigDecimal控制精度(如保留两位小数) - 不要用
getUsableSpace()减getTotalSpace()算已用空间,应使用total - usable或total - getFreeSpace(),二者语义不同 - 若需“已用大小”,推荐:
long used = store.getTotalSpace() - store.getUsableSpace();
完整安全示例(带异常与空值防护)
以下代码兼顾健壮性与可读性:
Path path = Paths.get("/var/log");
try {
FileStore store = Files.getFileStore(path);
long total = store.getTotalSpace();
long usable = store.getUsableSpace();
<pre class="brush:php;toolbar:false;">if (total <p>} catch (IOException e) {
System.err.println("获取存储信息失败: " + e.getMessage());
}</p>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










