【发布时间】:2009-01-20 16:48:56
【问题描述】:
在我的 Windows 机器上,我的主硬盘驱动器有字母 C: 和名称“本地磁盘”。
为了在 Windows 上列出 Java 中的驱动器号,File 对象具有静态 listRoots() 方法。但我找不到在 Windows 上获取驱动器名称(而不是驱动器号)的方法。
以前有人试过吗?
【问题讨论】:
在我的 Windows 机器上,我的主硬盘驱动器有字母 C: 和名称“本地磁盘”。
为了在 Windows 上列出 Java 中的驱动器号,File 对象具有静态 listRoots() 方法。但我找不到在 Windows 上获取驱动器名称(而不是驱动器号)的方法。
以前有人试过吗?
【问题讨论】:
是的,您需要获取 FileSystemView 对象并使用getSystemDisplayName。 (我曾经用 Java 实现过一个文件系统浏览器)。
虽然它并不完美,但它会让你得到名字。来自文档:
在系统文件浏览器中显示的文件、目录或文件夹的名称。 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
*/
}
}
【讨论】: