Получить имя раздела из буквы диска и наоборот

Программа, над которой я работаю, требует доступа к съемным дискам. Обычно это не является проблемой, потому что точка монтирования должна оставаться той же (например: в Ubuntu SD-карта моего телефона монтируется на /media/sebastian/GT-S5830/). Но в Windows есть буквы дисков, которые могут отличаться. (Тот же телефон: однажды E:\, после подключения, когда камера была установлена ​​на E:, он стал F: и остался.)

Поэтому я хочу решить эту проблему, сохранив не букву диска, а имя раздела.

Например: При настройке был указан путь E:\DCIM\Camera\. Теперь я хочу сделать следующее:

  • Получить имя раздела, смонтированного на E:
  • Сохранить путь к данному каталогу как что-то вроде <partname>:\DCIM\Camera\
  • При доступе к устройству разрешите букву диска раздела с именем partname
  • Создайте путь, объединив букву диска и часть пути после двоеточия.

Как я могу получить имя раздела, указав точку монтирования в Windows и наоборот, в Java?


person s3lph    schedule 11.01.2014    source источник


Ответы (1)


Возможно, вы захотите изучить FileSystemView, чтобы получить больше информации о файловой системе. Более разнообразные примеры здесь.

По вашему делу вы можете получить доступ к съемному диску и сделать что-нибудь с информацией:

FileSystemView fsv = FileSystemView.getFileSystemView();
        File[] files = File.listRoots();

        File[] roots = fsv.getRoots();
        for (int i = 0; i < roots.length; i++) {
            System.out.println("Root: " + roots[i]);
        }

        for (File fi : files) {
            if (fsv.getSystemTypeDescription(fi).contains("Local Disk")
                    || fsv.getSystemTypeDescription(fi).contains(
                            "Removable Disk")) {
                System.out.println(fsv.getSystemDisplayName(fi));
            }

        }

Вывод:

Root: C:\Users\popofibo\Desktop
Local Disk (C:)
Recovery (D:)
Removable Disk (E:)

При необходимости вы можете проверить информацию о томах дисков Windows с помощью JNA - подробнее здесь.

person StoopidDonut    schedule 11.01.2014