Обнаружение запоминающих устройств USB с помощью Java - PullRequest
8 голосов
/ 30 сентября 2010

История позади ...

Мне действительно нравятся телешоу, но я возвращаюсь домой только два раза в месяц.В остальное время я живу в доме без интернета (хотя рядом с моим университетом, поэтому бесплатный Wi-Fi качается! - когда он работает -), поэтому мне нужно было небольшое программное обеспечение, которое могло бы обновить мой портативный жесткий диск с моими новыми шоукогда я возвращаюсь домой, где файловый сервер, синхронизированный с подкастами, делает свою работу.Я сделал это с помощью Java, и он работает.

Проблема

Сейчас у меня есть файл .properties , гдеЯ сохранил смонтированный каталог этого USB HD.Недостаточно.Я хочу, чтобы программное обеспечение могло обнаружить все запоминающие устройства USB и позволить пользователю выбирать, какое из них использовать для хранения файлов.Как я могу это сделать?

Подробности

a) он должен быть на Java (я имею в виду, он также может работать с выполнением локальногокоманды хоста типа dir или что-то в этом роде)

b) мой сервер работает на Windows, но я предпочитаю, чтобы это было решение, не зависящее от ОС

Ответы [ 3 ]

3 голосов
/ 30 сентября 2010

Хотя я не вижу этого в вашем вопросе, я предполагаю, что вы очень хорошо знакомы с методом File.listRoots (), который возвращает массив корней файлов.

Тогда вы можете просто перебрать их и попытаться определить, являются ли они флэш-накопителями. Некоторые хаки могут быть такими:

File[] roots = File.listRoots();

if (roots == null) {
  // you have a different problem here.  Is it even a computer we are talking about?
}

// Iterate through roots
for (File root : roots) {
    if (root.canWrite()) {  // Or, you could use File.createTempfile with that folder
        // if root does not contain some well know files
        // Or, if root contains some well known files
        // Based on these 2 hacks, or possible other characteristics, you may be reasonably sure
    }
}

Это все, что я могу предложить. С большим количеством собственных программ можно сделать гораздо больше, а затем вызывать их из программы Java.

2 голосов
/ 28 февраля 2014

Прекрасный способ был предоставлен в Nio. Проверьте это:

import java.nio.file.*;
for(Path p:FileSystems.getDefault().getRootDirectories()){
    System.out.println(p);
}

Вы получите все корни как объекты пути;

2 голосов
/ 01 октября 2010

Вы можете проверить javax.usb проект. В настоящее время существует две сертифицированных реализации для Linux и BSD и реализация для windows (кажется, что она все еще не завершена, но я полагаю, что она позволяет перечислить подключенные устройства USB).

Но я не уверен, стоит ли включать в список только USB-накопители (вместо всех накопителей, как в @Amrinder Arora answer), стоит принять новый набор библиотек и бороться с полу-полной реализацией ...

...