【问题标题】:Acquiring drive names (as opposed to drive letters) in Java在 Java 中获取驱动器名称(而不是驱动器号)
【发布时间】:2009-01-20 16:48:56
【问题描述】:

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

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

以前有人试过吗?

【问题讨论】:

    标签: java windows


    【解决方案1】:

    是的,您需要获取 FileSystemView 对象并使用getSystemDisplayName。 (我曾经用 Java 实现过一个文件系统浏览器)。

    虽然它并不完美,但它会让你得到名字。来自文档:

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

    【讨论】:

    • 如何获取磁盘名称。我不是在谈论卷标)而是像 HP CD Drive、Samsung SSD、StoreJet 等磁盘名称
    【解决方案2】:

    实际上要获取驱动器名称(例如本地磁盘),您需要使用 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
          */
        }
    }
    

    【讨论】:

    • USB 密钥的系统类型描述是什么?它从 Windows XP 到 Windows 7 有什么不同吗?
    • @Maxbester :对于 USB 密钥,getSystemTypeDescription() 将返回“Disque amovible”(法语)或“Removable disk”(英语)。
    • 谢谢。这很奇怪,没有办法从全局系统属性中获取这些字符串......
    • @RealHowTo 你是个好人。你解决了我的问题。你能告诉我除了使用 JNI/VBScript 之外,还有什么方法可以获取 USB 设备的硬件详细信息,因为我使用 VBScript 获取了硬件详细信息。但它有点棘手,你有没有像上面这样的小代码 sn-p 来获取硬件详细信息,如 id、供应商名称等。
    【解决方案3】:

    使用WMI(通过JACOBcom4j)是另一种选择。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2011-11-05
      • 2012-05-24
      • 2013-10-11
      • 1970-01-01
      相关资源
      最近更新 更多