Я пытаюсь найти способ обнаружить, когда флешка подключена к моему компьютеру. До сих пор решение, которое я нашел, состояло в опросе FileSystem#getFileStores
для внесения изменений. Это действительно говорит мне, когда флэш-диск был вставлен, но насколько я могу судить, нет способа найти место для него. FileStore#type
и FileStore#name
обе кажутся крайне ненадежными, так как их возвращаемое значение является специфичным для реализации, но они являются единственными методами, которые могут возвращать любую релевантную информацию, которая может помочь найти каталог для FileStore
.Найти каталог для 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
Действительно ли это работает для Windows? Похоже, что он пропустит диск, который я смонтирую на C: \ Data. Весь смысл использования этого нового API заключается в том, что он обещал найти мне все точки монтирования, а не только корни. – Trejkaz
Кроме того,/media? Вы не имеете в виду/mnt? – Trejkaz
@ Трейказ Я не знал, что вы можете это сделать. Он работает в стандартном случае, когда диски монтируются в виде букв. По крайней мере, на Ubuntu, все по умолчанию установлено/media. Вы также можете использовать/etc/mtab для более гибкой работы в Linux-системах (я не очень сильно использую Windows, поэтому я не знаю другого). – Jeffrey