フラッシュ ドライブがコンピュータに接続されたことを検出する方法を探しています。これまでのところ、私が見つけた解決策は、変更をポーリング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