Получение имен дисков (в отличие от букв дисков) в Java - PullRequest
12 голосов
/ 20 января 2009

На моем компьютере с Windows мой основной жесткий диск имеет букву C: и имя «Локальный диск».

Чтобы вывести буквы дисков в Java в Windows, у объекта File есть статический метод listRoots (). Но я не могу найти способ получить имена дисков (в отличие от букв дисков) в Windows.

Кто-нибудь пробовал это раньше?

Ответы [ 3 ]

11 голосов
/ 20 января 2009

Ах да, вам нужно получить объект FileSystemView и использовать getSystemDisplayName . (Однажды я реализовал браузер файловой системы на Java).

Это не идеально, но оно даст вам имя. Из документации:

Имя файла, каталога или папки, как оно будет отображаться в системном браузере файлов. Пример из Windows: каталог «M: \» отображается как «CD-ROM (M :)». Реализация по умолчанию получает информацию из класса ShellFolder.

10 голосов
/ 21 января 2009

На самом деле, чтобы получить имя диска (например, Local Disk), вам нужно использовать 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
      */
    }
}
0 голосов
/ 12 сентября 2009

Использование WMI (через JACOB или com4j ) является другой альтернативой.

FileSystemView.getSystemDisplayName не дает вам метку необработанного объема. Это комбинация буквы диска и метки тома, по умолчанию, если метка не была установлена.

WMI предоставит вам метку необработанного тома, а также некоторую другую информацию, например, является ли диск съемным (удивительно, что FileSystemView.isFloppyDrive() не говорит вам об этом; это буквально означает «это дискета»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...