推荐使用 File.getUsableSpace() 获取文件所在分区的可用字节数,简洁可靠且兼容Java 6+;若需总空间等多维度信息,则用Files.getFileStore(path).getUsableSpace()等NIO.2方法。

在 Java 中,可以通过 File 或 Path 对象获取其所在文件系统的根路径,再调用相应方法获取剩余磁盘空间。
使用 File.getUsableSpace()(推荐,简洁可靠)
File.getUsableSpace() 返回当前用户对该文件所在分区的**可用字节数**(考虑权限和预留空间,最贴近实际可写空间)。
- 适用于 Java 6+,无需 NIO;
- 自动定位到该文件所在的逻辑卷/分区,无需手动找根目录;
- 返回值是
long类型,单位为字节,注意避免 int 溢出。
示例:
File file = new File("/path/to/your/file.txt");
long usableBytes = file.getUsableSpace();
System.out.println("可用空间: " + usableBytes + " 字节");
// 可转为 MB:String.format("%.2f MB", usableBytes / 1024.0 / 1024.0)
使用 Files.getFileStore() 获取更详细的磁盘信息
Java 7+ 提供了 NIO.2 的 FileStore API,能获取总空间、可用空间、未分配空间等,适合需要多维度指标的场景。
立即学习“Java免费学习笔记(深入)”;
- 先通过
Paths.get(...)得到Path; - 调用
Files.getFileStore(path)获取所属文件系统存储单元; - 再调用
getUsableSpace()、getTotalSpace()、getUnallocatedSpace()。
示例:
Path path = Paths.get("/path/to/your/file.txt");
try {
FileStore store = Files.getFileStore(path);
long usable = store.getUsableSpace();
long total = store.getTotalSpace();
System.out.println("可用:" + usable + " 字节,总计:" + total + " 字节");
} catch (IOException e) {
e.printStackTrace();
}
注意事项
-
getUsableSpace()和FileStore.getUsableSpace()都返回“用户可用”空间(排除 root 预留、权限限制等),比getFreeSpace()更实用; - 如果文件路径不存在,
File.getUsableSpace()仍会尝试基于其父目录或挂载点推断,通常有效;但Files.getFileStore()在路径不存在时可能抛IOException,建议确保路径存在或做异常处理; - 跨平台行为一致(Windows、Linux、macOS 均支持),无需额外适配。
不复杂但容易忽略:优先用 File.getUsableSpace(),简单直接;需要总空间或兼容旧路径逻辑时,再选 FileStore 方案。


















