Я пытаюсь найти способ обнаружить, когда флеш-накопитель подключен к моему компьютеру. До сих пор решение, которое я нашел, состояло в опросе FileSystem#getFileStores
изменений. Это действительно говорит мне, когда флэш-диск был вставлен, но насколько я могу судить, нет способа найти место для него. FileStore#type
и FileStore#name
обе кажутся крайне ненадежными, поскольку их возвращаемое значение является специфичным для реализации, но они появляются быть единственными методами, которые могут возвращать любую релевантную информацию, которая могла бы помочь найти каталог для FileStore
.
Имея это в виду, следующий код:
public class Test {
public static void main(String[] args) throws IOException {
for (FileStore store : FileSystems.getDefault().getFileStores()) {
System.out.println(store);
System.out.println("\t" + store.name());
System.out.println("\t" + store.type());
System.out.println();
}
}
}
Дал мне этот вывод:
/ (/dev/sda5)
/dev/sda5
ext4
/* snip */
/media/TI103426W0D (/dev/sda2)
/dev/sda2
fuseblk
/media/flashdrive (/dev/sdb1)
/dev/sdb1
vfat
Как оказалось, FileStore#type
возвращает формат диска, а FileStore#name
возвращает местоположение файла устройства для диска. Насколько я могу судить, единственным способом, который имеет расположение диска, является метод toString
, но извлечение имени пути из него кажется опасным, потому что я не уверен, насколько хорошо это конкретное решение будет задерживаться на других операционных систем и будущих версий Java.
Есть ли что-то, что я здесь отсутствует, или это просто невозможно с использованием Java?
Информация о системе:
$ java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu2)
OpenJDK Client VM (build 22.0-b10, mixed mode, sharing)
$ uname -a
Linux jeffrey-pc 3.2.0-24-generic-pae #37-Ubuntu SMP Wed Apr 25 10:47:59 UTC 2012 i686 athlon i386 GNU/Linux