Идентификация подключенного диска с локального диска

Я перечисляю все доступные диски на своем рабочем столе, используя File.listRoots() в Java. У меня есть несколько подключенных дисков. Когда я перечисляю корни, я получаю локальные диски, а также подключенные диски. Чтобы исключить подключенные диски, я использовал следующий фрагмент кода:

for (File drive :File.listRoots()){
   String typeDescription = FileSystemView.getFileSystemView().getSystemTypeDescription(drive);
}

Основываясь на возвращаемом описании типа, я фильтрую диск. Но это не является общепринятым стандартом и неприемлемо для других операционных систем. Поддерживается только для окон. Также существует языковое ограничение (английский язык поддерживается только для описания типа). Может ли кто-нибудь дать мне какое-либо другое решение для фильтрации подключенных дисков по всему миру.

Примечание.
Это должно относиться к JDK1.6.


person vignesh kumar rathakumar    schedule 16.10.2012    source источник
comment
Любое другое решение будет зависеть от платформы. Но поскольку Все доступные диски — это исключительно термин Windows, вы, вероятно, ищете решение только для Windows?   -  person Oleg Mikheev    schedule 16.10.2012
comment
@Олег Михеев. Да .. Я ищу только решение в Windows. Но в Linux-машине File.listRoots() возвращает только корневой каталог. Так что в линуксе проблем нет. Мне нужно различать сопоставленный диск и локальный диск на платформе Windows...   -  person vignesh kumar rathakumar    schedule 16.10.2012
comment
Удалил мой ответ. Я только что попробовал это на OS X и вижу проблему, с которой вы столкнулись. Я опубликую еще один ответ, если я что-нибудь придумаю.   -  person Dave    schedule 18.10.2012


Ответы (1)


Если ваша проблема только в Windows, почему бы не использовать:

if (System.getProperty("os.name").contains("Windows")) ?

Вы можете написать программу на C++, чтобы сделать это (человеческий) язык независимо, используя IVdsDisk::GetProperties, а затем импортировать ее как функцию native в Java (и указать виртуальной машине только попытаться запустить метод native, если вы используете Windows.

ссылка MSDN для начала работы< /а>

Проверьте, является ли VDS_DISK_PROP.dwMediaType FILE_DEVICE_NETWORK или FILE_DEVICE_NETWORK_FILE_SYSTEM. Вы можете увидеть все поддерживаемые типы здесь: winioctrl.h

Возможно, это значение доступно в Java, но в Java обычно нет специфических для платформы вещей, поэтому я сомневаюсь в этом.

person durron597    schedule 23.10.2012
comment
@durron597 .. Я могу различать ОС, используя фрагмент кода, который вы упомянули выше.. Но подумайте об этом сценарии, когда я установил ОС Windows на другом языке, кроме английского, я не могу использовать описание типа, чтобы различать подключенные диски и локальные диски . Если я хочу различать их по описанию типа, я должен проверить язык ОС, прежде чем идентифицировать картографический диск с локального диска. Это может привести к количеству условных проверок столько же языков, сколько и в ОС Windows. - person vignesh kumar rathakumar; 25.10.2012
comment
@vigneshkumarrathakumar: я обновил пост, возможно, он вам поможет! - person durron597; 25.10.2012