Files.getFileStore()用于获取文件所在分区的存储信息,包括总空间、可用空间和挂载点;需通过Path调用并处理IOException;空间单位为字节,可换算为MB/GB;挂载点在Unix系统可用getAttribute("unix:mountedOn")获取,Windows下常用getRoot()。

Files.getFileStore() 是 Java NIO.2 提供的用于获取文件系统存储信息的方法,可以用来查询某个文件所在磁盘分区(即 file store)的总空间、可用空间和挂载点(在 Unix/Linux/macOS 上叫 mount point,Windows 上对应的是驱动器根路径,如 C:)。
1. 获取 FileStore 实例
先通过一个 Path 对象调用 Files.getFileStore(),注意该方法可能抛出 IOException(例如路径不存在或无权限),需捕获处理:
// 示例:获取 /tmp 下某个文件所在分区的信息
Path path = Paths.get("/tmp/test.txt");
FileStore store = Files.getFileStore(path);
2. 查询总空间与可用空间(单位:字节)
FileStore 提供以下方法获取空间信息(返回值为 long,单位是字节):
-
store.getTotalSpace():整个分区的总容量(格式化后通常显示为“总大小”) -
store.getUsableSpace():当前进程可使用的剩余空间(考虑用户配额、保留块等,比getUnallocatedSpace()更实用) -
store.getUnallocatedSpace():未分配的磁盘空间(不含预留/配额限制,一般不推荐用于判断“是否还能写入”)
// 转换为更易读的单位(如 GB)示例:
long totalGB = store.getTotalSpace() / (1024L * 1024L * 1024L);
long usableGB = store.getUsableSpace() / (1024L * 1024L * 1024L);
3. 获取挂载点(Mount Point)
Java 没有直接提供标准 API 获取挂载点字符串,但可通过以下方式间接获得:
-
Unix/Linux/macOS:多数 JDK 实现中,
store.toString()或store.name()会返回类似/dev/sda1或/的标识;更可靠的方式是使用FileStore.getAttribute("unix:mountedOn")(仅限支持 Unix 属性的系统) -
Windows:
store.name()通常返回驱动器名,如"C:";也可用path.toRealPath().getRoot().toString()获取根路径(如"C:\")
// 推荐兼容写法(适用于大多数场景):
String mountPoint = path.toRealPath().getRoot() != null ?
path.toRealPath().getRoot().toString() : "unknown";
4. 完整示例代码
try {
Path p = Paths.get("/tmp");
FileStore store = Files.getFileStore(p);
System.out.println("挂载点: " + p.toRealPath().getRoot());
System.out.println("总空间: " + store.getTotalSpace() / (1024*1024) + " MB");
System.out.println("可用空间: " + store.getUsableSpace() / (1024*1024) + " MB");
} catch (IOException e) {
e.printStackTrace();
}

















