在Java中获取驱动器名称(而不是驱动器号)

在我的Windows机器上,我的主硬盘上有字母C:和“本地磁盘”的名称。

要在Windows上列出Java中的驱动器号,File对象具有静态listRoots()方法。 但是我找不到在Windows上获取驱动器名称(而不是驱动器号)的方法。

有没有人试过这个?

啊是的,你需要得到FileSystemView对象,并使用getSystemDisplayName 。 (我曾经用Java实现过一个Filesystem浏览器)。

这不是完美的,但它会得到你的名字。 从文档:

在系统文件浏览器中显示的文件,目录或文件夹的名称。 来自Windows的示例:“M:\”目录显示为“CD-ROM(M :)”默认实现从ShellFolder类获取信息。

其实要获得驱动器名称(例如本地磁盘),您需要使用getSystemTypeDescription。 getSystemDisplayName返回卷名称。

import java.io.File; import java.util.Arrays; import java.util.List; import javax.swing.filechooser.FileSystemView; public class Test2 { public static void main(String args[]){ List <File>files = Arrays.asList(File.listRoots()); for (File f : files) { String s1 = FileSystemView.getFileSystemView().getSystemDisplayName (f); String s2 = FileSystemView.getFileSystemView().getSystemTypeDescription(f); System.out.println("getSystemDisplayName : " + s1); System.out.println("getSystemTypeDescription : " + s2); } /* output (French WinXP) getSystemDisplayName : getSystemTypeDescription : Disquette 3½ pouces getSystemDisplayName : REGA1 (C:) getSystemTypeDescription : Disque local getSystemDisplayName : getSystemTypeDescription : Lecteur CD getSystemDisplayName : My Book (F:) getSystemTypeDescription : Disque local */ } } 

使用WMI (通过JACOB或com4j )是另一种选择。

FileSystemView.getSystemDisplayName不会为您提供原始卷标签。 它是驱动器号和卷标的组合,在标签没有被设置的情况下是默认的。

WMI会给你原始的卷标,加上一些其他的信息,如驱动器是否是可移动的(令人惊讶的是FileSystemView.isFloppyDrive()不会告诉你这个;它的字面意思是“它是一个软盘”)。