Ich versuche eine Möglichkeit zu finden, zu erkennen, wenn ein Flash-Laufwerk an meinen Computer angeschlossen wurde. Bisher war die Lösung, die ich fand, FileSystem#getFileStores
für Änderungen abzufragen. Dies sagt mir zwar, wann das Flash-Laufwerk eingelegt wurde, aber soweit ich das beurteilen kann, gibt es keine Möglichkeit, den Speicherort dafür zu finden. FileStore#type
und FileStore#name
scheinen beide sehr unzuverlässig, da ihr Rückgabewert implementierungsspezifisch ist, aber sie scheinen die einzigen Methoden zu sein, die möglicherweise relevante Informationen zurückgeben, die bei der Suche nach dem Verzeichnis für FileStore
helfen könnten.Finden Sie das Verzeichnis für einen FileStore
, die mit im Auge, der folgende Code:
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();
}
}
}
Gab mir diese Ausgabe:
/ (/dev/sda5)
/dev/sda5
ext4
/* snip */
/media/TI103426W0D (/dev/sda2)
/dev/sda2
fuseblk
/media/flashdrive (/dev/sdb1)
/dev/sdb1
vfat
Wie sich herausstellt, FileStore#type
das Format des Antriebs zurück und FileStore#name
gibt den Standort von die Gerätedatei für das Laufwerk. Soweit ich feststellen kann, ist die einzige Methode, die den Speicherort des Laufwerks hat, die toString
-Methode, aber das Extrahieren des Pfadnamens scheint gefährlich, weil ich nicht sicher bin, wie gut diese bestimmte Lösung anderen Betriebssystemen standhält und zukünftige Versionen von Java.
Gibt es etwas, das mir hier fehlt oder ist das einfach nicht mit Java möglich?
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
Funktioniert das wirklich für Windows? Es scheint, als würde es ein Laufwerk verpassen, das ich bei C: \ Data mounte. Der springende Punkt, an dem ich diese neuere API verwende, ist, dass sie mir versprochen hat, alle Mountpunkte und nicht nur die Wurzeln zu finden. – Trejkaz
Auch,/Medien? Meinst du nicht/mnt? – Trejkaz
@Trejkaz Ich wusste nicht, dass du das kannst. Es funktioniert für den Standardfall, in dem Laufwerke als Buchstaben montiert werden. Zumindest unter Ubuntu sind Dinge standardmäßig in/media eingebunden. Sie könnten auch/etc/mtab für eine flexiblere Arbeit auf Linux-Systemen verwenden (ich benutze Windows nicht wirklich, so dass ich kein anderes weiß). – Jeffrey