Определение физического местоположения файла и статуса устройства в Java - PullRequest
2 голосов
/ 03 октября 2009

Я пишу программу, которая должна содержать большой каталог файлов. Они могут быть на разных устройствах, и я хотел бы знать, как лучше всего это сделать в Java. Я имею в виду, что мне нужно:

  • Определите устройство, в котором находится файл (или просто каталог), и получите имя или идентификатор для этого устройства, которые будут согласованы ...
  • Можно использовать этот идентификатор устройства, чтобы проверить, подключено ли устройство (например, ручка USB, установлен жесткий диск или нет, сетевой диск ...)
  • Совместимость с Windows, Unix и любым другим ...

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

Ответы [ 3 ]

1 голос
/ 03 октября 2009

Java 7 имеет класс Path, который является улучшением по сравнению с File. Проверьте это на http://download.java.net/jdk7/binaries/, или учебник на http://java.sun.com/docs/books/tutorial/essential/io/fileio.html.

0 голосов
/ 05 октября 2009

Быстрый гугл обнаружил http://today.java.net/article/2006/07/05/java-and-usb, что может помочь. По крайней мере, он описывает состояние поддержки USB несколько лет назад.

Я бы попытался избежать этой проблемы, упростив ее аспекты. А именно, я бы держал ваш каталог в абстракции файлов / папок, а затем использовал бы приведенную выше статью для генерации кода, который прослушивает любую активность USB.

Конечно, такой подход потребует от вас проверить, существует ли определенный файл / папка перед загрузкой этой части вашего каталога. Также вам потребуется, чтобы поток постоянно прослушивал события USB, а затем выполнял необходимые проверки, если любое устройство USB было подключено / отключено, и снова выполнял необходимые проверки в файловой системе.

0 голосов
/ 03 октября 2009

Если допустимо (а) работать только в Windows и (б) требовать права администратора для запуска вашей программы, то это можно сделать с помощью WMI через JACOB .

В частности, взгляните на класс Win32_LogicalDisk . Этого достаточно, чтобы получить тип диска (IDE, сеть, USB и т. Д.), Метку тома и серийный номер тома (которых может быть достаточно для однозначной идентификации съемного тома для целей вашего приложения.)

Для более сложных функций (например, получение серийных номеров привода) существуют другие классы, например. Win32_DiskDrive, Win32_DiskPartition, Win32_PhysicalMedia. Тем не менее, они будут работать полностью, только если вы работаете от имени администратора.

...