file.listRoots не работает для переносного USB-накопителя в Java

file.listRoots() отлично работает с информацией о внутреннем файловом накопителе, но не получает информацию о USB и переносных файлах. Вот мой код:

File[] paths; 
try {
    // returns pathnames for files and directory
    paths = File.listRoots();
    for (File path : paths) // for each pathname in pathname array
        System.out.println(path); // prints file and directory paths
} catch(Exception e) { // if any error occurs
    e.printStackTrace();
}

Я не понимаю, почему информация о моем переносном USB-накопителе не загружается?


person Harish Rawal    schedule 30.09.2020    source источник
comment
Какой вывод вы получаете, на какой ОС и какое отношение этот вопрос имеет к javafx?   -  person mipa    schedule 30.09.2020
comment
я получаю только настольный диск, такой как C, D, не получаю информацию о usb, window10, я использую этот код в проекте javafx   -  person Harish Rawal    schedule 30.09.2020
comment
это простая java и не имеет отношения к fx - пожалуйста, удалите тег javafx   -  person kleopatra    schedule 30.09.2020


Ответы (1)


Если ваш USB-накопитель подключен и доступен, вы можете проверить, показывает ли код NIO тома, следующим образом:

for (Path root : FileSystems.getDefault().getRootDirectories()) {
    FileStore fs = Files.getFileStore(root);
    System.out.format("FileStore %s\tName: '%s'\tType: %s%n", root, fs.name(), fs.type());
    System.out.println();
}

Внутри приведенного выше цикла вы также можете проверить другие атрибуты файловой системы, такие как флаг съемного хранилища:

String[] attrs = new String[]{"volume:isRemovable"};

for (String s : attrs) {
    System.out.format("\t%s=%s", s, fs.getAttribute(s));
}
person DuncG    schedule 30.09.2020
comment
я использовал это, но снова показывал только диски C, D, E, а не мое подключенное USB-устройство - person Harish Rawal; 30.09.2020
comment
Ваш диск назначен или сопоставлен с буквой диска в проводнике Windows? Если нет, то этот код не поможет. - person DuncG; 30.09.2020
comment
имя диска моего устройства - moto - person Harish Rawal; 30.09.2020
comment
Каково решение? - person Harish Rawal; 30.09.2020
comment
Некоторые телефоны/планшеты открывают свои диски, чтобы работало сопоставление дисков Windows, и вы могли бы легко читать/писать через Java. Однако похоже, что ваше устройство может использовать протокол передачи мультимедиа, и вам необходимо использовать клиент с поддержкой MTP (одним из таких приложений является проводник Windows). Эта тема упоминалась здесь [stackoverflow.com /вопросы/39210514/ - person DuncG; 30.09.2020