Znajdź katalog dla FileStore
Próbuję znaleźć sposób na wykrycie, kiedy dysk flash został podłączony do mojego komputera. Jak dotąd rozwiązaniem, które znalazłem, było sondowanieFileSystem#getFileStores
za zmiany. To rzeczywiście mówi mi, kiedy dysk flash został włożony, ale o ile wiem, nie ma sposobu na odzyskanie lokalizacji.FileStore#type
iFileStore#name
obie wydają się wysoce niewiarygodne, ponieważ ich wartość zwracana jest specyficzna dla implementacji, ale wydają się być jedynymi metodami, które mogą zwrócić wszelkie istotne informacje, które mogą pomóc w znalezieniu katalogu dlaFileStore
.
Mając to na uwadze, następujący kod:
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();
}
}
}
Dałem mi to wyjście:
/ (/dev/sda5)
/dev/sda5
ext4
/* snip */
/media/TI103426W0D (/dev/sda2)
/dev/sda2
fuseblk
/media/flashdrive (/dev/sdb1)
/dev/sdb1
vfat
Jak się okazuje,FileStore#type
zwraca format dysku iFileStore#name
zwraca lokalizację pliku urządzenia dla dysku. O ile wiem, jedyną metodą, która ma lokalizację napędu, jest metodatoString
metoda, ale wyodrębnienie nazwy ścieżki z niej wydaje się niebezpieczne, ponieważ nie jestem pewien, jak dobrze to konkretne rozwiązanie wytrzyma na innych systemach operacyjnych i przyszłych wersjach Java.
Czy czegoś tu brakuje, czy jest to po prostu niemożliwe z Javą?
Informacje o systemie:
$ 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