在Java中获取驱动器名(与驱动器号相反)

在Java中获取驱动器名(与驱动器号相反),java,windows,Java,Windows,在我的Windows计算机上,我的主硬盘上有字母C:和名称“本地磁盘” 要在Windows上用Java列出驱动器号,File对象具有静态listRoots()方法。但是我找不到在Windows上获取驱动器名(而不是驱动器号)的方法 以前有人尝试过吗?啊,是的,您需要获取FileSystemView对象并使用它。(我曾经用Java实现了一个文件系统浏览器) 虽然它并不完美,但它会给你起个名字。从文件中: 在系统文件浏览器中显示的文件、目录或文件夹的名称。来自Windows的示例:“M:\”目录显示

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

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


以前有人尝试过吗?

啊,是的,您需要获取FileSystemView对象并使用它。(我曾经用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
      */
    }
}
导入java.io.File;
导入java.util.array;
导入java.util.List;
导入javax.swing.filechooser.FileSystemView;
公共类Test2{
公共静态void main(字符串参数[]){
List files=Arrays.asList(File.listRoots());
用于(文件f:文件){
字符串s1=FileSystemView.getFileSystemView().getSystemDisplayName(f);
字符串s2=FileSystemView.getFileSystemView().getSystemTypeDescription(f);
System.out.println(“getSystemDisplayName:+s1”);
System.out.println(“getSystemTypeDescription:+s2”);
}
/*输出(法语WinXP)
getSystemDisplayName:
getSystemTypeDescription:3½pouces
getSystemDisplayName:REGA1(C:)
getSystemTypeDescription:取消本地
getSystemDisplayName:
getSystemTypeDescription:选取器CD
getSystemDisplayName:我的书(F:)
getSystemTypeDescription:取消本地
*/
}
}
使用(通过或)是另一种选择

FileSystemView.getSystemDisplayName
不提供原始卷标。它是驱动器号和卷标的组合,如果未设置标签,则为默认值


WMI将为您提供原始卷标,以及一些其他信息,例如驱动器是否可移动(令人惊讶的是
FileSystemView.isFloppyDrive()
没有告诉您这一点;它的字面意思是“它是软盘吗”)

USB密钥的系统类型描述是什么?它与Windows XP和Windows 7不同吗?@Maxbester:对于USB密钥,getSystemTypeDescription()将返回“Disque amovible”(法语)或“Removable disk”(英语)。谢谢。奇怪的是,没有办法从全局系统属性中获取这些字符串…@RealHowTo你是个伟人。你解决了我的问题。您能告诉我,除了使用JNI/VBScript,还有什么方法可以获取USB设备的硬件详细信息吗?因为我是使用VBScript获取硬件详细信息的。但是它有点棘手,你是否有任何像上面这样的小代码片段来获取硬件细节,如id、供应商名称等。如何获取磁盘名称。我说的不是卷标签),而是磁盘名称,如HP CD驱动器、三星SSD、StoreJet等