登录
首页 >  文章 >  java教程

NIO.2 FileStore获取磁盘可用百分比方法

时间:2026-03-30 08:18:31 469浏览 收藏

推广推荐
下载万磁搜索绿色版 ➜
支持 PC / 移动端,安全直达
本文详细介绍了如何利用Java NIO.2的FileStore类准确获取磁盘可用空间百分比——由于FileStore不直接提供现成的百分比方法,需通过getUsableSpace()与getTotalSpace()手动计算,并重点强调了避免除零异常、统一使用字节单位、正确理解“可用空间”(已排除root保留块等系统限制)、区分不同文件系统的语义差异,以及处理权限不足、只读挂载、跨分区/网络路径等常见陷阱;附带健壮的异常处理示例,助你写出稳定可靠的磁盘空间监控代码。

如何通过NIO.2的FileStore获取当前磁盘分区的可用百分比

可以通过 FileStore 获取磁盘总空间和可用空间,再计算出可用百分比。注意:NIO.2 的 FileStore 不直接提供“已用”或“百分比”方法,需手动计算,且要避免除零、考虑单位一致性(字节)、并注意不同文件系统对“可用空间”的定义(如是否包含保留空间)。

获取 FileStore 实例

从任意路径出发,通过 Files.getFileStore(Path) 获取对应分区的 FileStore

Path path = Paths.get("/"); // 或 Paths.get("C:\\")(Windows)
FileStore store = Files.getFileStore(path);

FileStore 代表该路径所在物理/逻辑卷(如 /、C:、/home 等),不是整个磁盘的抽象——若挂载了多个分区,需分别查询。

读取空间信息并计算百分比

FileStore 提供三个关键方法:

  • getUsableSpace():普通用户可写入的字节数(推荐用于“可用”计算)
  • getTotalSpace():总字节数
  • getUnallocatedSpace():未分配字节数(不等于可用,因含保留块、权限限制等)

计算可用百分比(以 getUsableSpace() / getTotalSpace() 为主):

long total = store.getTotalSpace();
long usable = store.getUsableSpace();
<p>if (total > 0) {
double percent = (double) usable / total * 100.0;
System.out.printf("可用空间占比:%.2f%%\n", percent);
}</p>

注意事项与健壮性处理

  • 某些文件系统(如 ext4)默认为 root 保留 5% 空间,getUsableSpace() 已排除这部分,对普通用户更真实
  • getUsableSpace() 可能返回 0(如满盘、权限不足、只读挂载),应检查并提示
  • 不要用 getUnallocatedSpace() 替代 getUsableSpace() —— 它不反映实际可写容量
  • Windows 下若路径跨符号链接或网络驱动器,getFileStore() 可能抛 IOException,建议 try-catch

完整示例(含异常处理)

以下代码安全获取根分区可用百分比:

public static double getUsablePercent(String pathStr) throws IOException {
    Path path = Paths.get(pathStr);
    FileStore store = Files.getFileStore(path);
    long total = store.getTotalSpace();
    long usable = store.getUsableSpace();
    return total > 0 ? (double) usable / total * 100.0 : 0.0;
}
<p>// 使用
try {
double p = getUsablePercent("/");
System.out.printf("根分区可用率:%.1f%%\n", p);
} catch (IOException e) {
System.err.println("无法获取磁盘信息:" + e.getMessage());
}</p>

不复杂但容易忽略单位一致性和边界情况。

终于介绍完啦!小伙伴们,这篇关于《NIO.2 FileStore获取磁盘可用百分比方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>