利用Java获取磁盘基本信息
之前想写一个小的练手项目的时候突然有对这个的需求,但是网上全是到处搬运的错误的、不完整的代码,要不就是只给列个根目录出来…最后找了半天发现JDK本身就支持这个,于是就写出来分享一下。
完整代码
仅展示测试代码,实际使用时可能还需要改动。
测试环境:
- 操作系统:Windows 10 22H2
- Java版本:17
- JDK:GraalVM 17.0.7+8.1(Hotspot模式)
1 | package main; |
代码运行结果
我的电脑目前的磁盘有如下,其中G盘到J盘都是U盘。

以上代码的运行结果如下:
1 |
|
代码分析
实现功能的代码主要在getDiskInfo()方法中。首先通过FileStore fs = Files.getFileStore(Path root);来获取一个FileStore对象,然后通过这个对象来获取磁盘的相应信息的。
上面的代码中创建的fs对象的实现在java.base包中的sun.nio.fs.WindowsFileStore类,而这个类又继承了来自同一个包的抽象类java.nio.file.FileStore类。上面的代码中获取磁盘信息的方法实际上都是使用了被WindowsFileStore类重写的、来自FileSotre类中的方法。
在WindowsFileSotre类的实现中,主要使用了java.base包中的sun.nio.fs.WindowsNativeDispatcher类中的方法,而这个类有很多方法都是native方法,即使用了JNI调用了位于%JAVA_HOME%/bin目录中的net.dll和nio.dll两个dll中C/C++的方法(JDK文档说nio.dll需要net.dll作为依赖)
例如获取这个磁盘是否可移动的方法fs.getAttribute("volume:isRemovable")实际上调用了nio.dll中的方法Java_sun_nio_fs_WindowsNativeDispatcher_GetDriveType0,相对虚拟地址在00006078。
- 标题: 利用Java获取磁盘基本信息
- 作者: Denvo
- 创建于 : 2024-01-20 13:41:20
- 更新于 : 2026-01-25 17:29:40
- 链接: https://www.denvoshome.xyz/posts/Java-getDiskInfo/
- 版权声明: 本文章采用 CC BY-SA 4.0 进行许可。