Sto provando a trovare un modo per rilevare quando un'unità flash è stata collegata al mio computer. Finora, la soluzione che ho trovato è stato il sondaggio FileSystem#getFileStores
per le modifiche. Questo in effetti mi dice quando l'unità flash è stata inserita, ma per quanto posso dire non c'è modo di recuperare il percorso per esso. FileStore#type
e FileStore#name
sembrano entrambi altamente inaffidabili in quanto il loro valore di ritorno è specifico dell'implementazione, ma sembrano essere gli unici metodi che potrebbero restituire qualsiasi informazione rilevante che potrebbe aiutare a trovare la directory per il FileStore
.Trova la directory per un FileStore
Con questo in mente, il seguente codice:
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();
}
}
}
mi ha dato questo output:
/ (/dev/sda5)
/dev/sda5
ext4
/* snip */
/media/TI103426W0D (/dev/sda2)
/dev/sda2
fuseblk
/media/flashdrive (/dev/sdb1)
/dev/sdb1
vfat
Come si è visto, FileStore#type
restituisce il formato del disco e FileStore#name
restituisce la posizione di il file del dispositivo per l'unità. Per quanto ne so, l'unico metodo che ha la posizione dell'unità è il metodo toString
, ma estrarre il nome del percorso da esso sembra pericoloso perché non sono sicuro di quanto bene quella particolare soluzione reggerebbe su altri sistemi operativi e versioni future di Java.
C'è qualcosa che mi manca qui o semplicemente non è possibile con Java?
System Information:
$ 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
Funziona davvero per Windows? Sembra che mancherebbe un disco che monto su C: \ Data. Il punto che sto usando questa nuova API è che mi ha promesso di trovarmi tutti i punti di mount e non solo le radici. – Trejkaz
Inoltre,/media? Non intendi/mnt? – Trejkaz
@Trejkaz Non sapevo che potessi farlo. Funziona per il caso standard in cui le unità sono montate come lettere. Almeno su Ubuntu, le cose sono montate di default su/media. Si potrebbe anche usare/etc/mtab per un lavoro più flessibile sui sistemi Linux (non uso molto Windows così tanto, quindi non ne conosco un altro). – Jeffrey