file.listroots() 返回操作系统所有可用根目录的 file[] 数组,windows 返回 c:\、d:\ 等盘符,linux/macos 通常仅返回 /;不保证顺序,不检查可访问性,需用 canread() 校验,受限环境可能抛 securityexception。

File.listRoots() 是 Java 中用于获取当前操作系统所有可用根目录(即磁盘驱动器)的静态方法,返回一个 File[] 数组,每个元素代表一个根路径(如 Windows 的 C:\、D:\,Linux/macOS 的 / 等)。
基本用法:直接调用并遍历
该方法无需实例化,直接通过类名调用即可。返回结果包含所有逻辑或物理挂载的根路径,但不保证顺序,也不过滤不可访问或未就绪的驱动器(例如未插入的 U 盘可能仍出现在列表中,但后续访问会失败)。
- Windows 下通常返回
C:\、D:\等已分配盘符的驱动器;若存在网络驱动器(如Z:\),也可能包含在内(取决于系统映射状态) - Linux/macOS 下一般只返回
/(根文件系统),除非挂载了其他独立文件系统(如/mnt、/media/xxx),但 listRoots() 不会自动列出这些挂载点 —— 它只返回 JVM 认为的“根”,通常是/
注意权限与可访问性
方法本身不检查读写权限或设备就绪状态。即使某个根目录出现在数组中,调用 file.canRead() 或 file.listFiles() 仍可能返回 null 或抛出安全异常。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 建议对每个根目录调用
canRead()进行前置校验 - 在受限安全策略(如 Applet 或某些容器环境)下,该方法可能被禁止,抛出
SecurityException
简单示例代码
以下代码打印所有可读的根目录:
File[] roots = File.listRoots();
if (roots != null) {
for (File root : roots) {
if (root != null && root.canRead()) {
System.out.println("Root: " + root.getAbsolutePath());
}
}
}
输出示例(Windows):
Root: C:\
Root: D:\
替代方案(需更全面枚举挂载点)
若需获取 Linux/macOS 下所有挂载点(如 /home、/boot、USB 设备等),File.listRoots() 不适用。此时应使用:
-
FileSystemView.getFileSystemView().getRoots()(Swing 提供,部分平台支持更多挂载点) - 调用系统命令(如
df -h或mount)解析输出(跨平台需谨慎处理) - Java 7+ 的
FileSystems.getDefault().getFileStores(),可遍历所有文件存储,包含挂载点、名称、总空间等详细信息
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










