Acquiring drive names (as opposed to drive letters) in Java
Asked Answered
N

3

13

On my Windows machine, my main hard drive has the letter C: and the name "Local disk".

To list the drive letters in Java on Windows, the File object has the static listRoots() method. But I can't find a way to acquire the drive names (as opposed to the drive letters) on Windows.

Has anyone tried this before?

Nuristan answered 20/1, 2009 at 16:48 Comment(0)
B
12

Ah yes, you need to get the FileSystemView object and use getSystemDisplayName. (I once implemented a Filesystem browser in Java).

It's not perfect though but it will get you the name. From the documentation:

Name of a file, directory, or folder as it would be displayed in a system file browser. Example from Windows: the "M:\" directory displays as "CD-ROM (M:)" The default implementation gets information from the ShellFolder class.

Bombardier answered 20/1, 2009 at 16:52 Comment(1)
How to get Disk name. I am not talking about volume lable) But the disk name like HP CD Drive, Samsung SSD, StoreJet etcGoahead
T
11

Actually to get the drive name (ex. Local Disk) you need to use getSystemTypeDescription. getSystemDisplayName returns the volume name.

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
      */
    }
}
Tripper answered 21/1, 2009 at 1:39 Comment(4)
What is the system type description for an USB key? Does it differ from Windows XP to Windows 7?Wolfort
@Wolfort : For a USB key, getSystemTypeDescription() will return "Disque amovible" (french) or "Removable disk" (english).Tripper
Thanks. This is strange there is no way to get those strings from a global system property...Wolfort
@Tripper you are great man. You've solved my problem. Can you please tell is there any way to get the hardware details of USB device except using JNI/VBScript cause I got the hardware details using VBScript. But its little tricky do you have any small code snippet like the above one to get hardware details like id,vendor name etc.Conveyancing
P
0

Using WMI (via JACOB or com4j) is another alternative.

FileSystemView.getSystemDisplayName does not give you the raw volume label. It is a combination of the drive letter and volume label, with a default in case the label has not been set.

WMI will give you the raw volume label, plus some other info such is whether the drive is removable (surprisingly FileSystemView.isFloppyDrive() does not tell you this; It does literally mean "is it a floppy disk.")

Paradis answered 11/9, 2009 at 23:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.