フラッシュドライブがコンピュータに接続されていることを検出する方法を見つけようとしています。これまでのところ、私が見つけた解決策は、変更を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#name
のフォーマットを返しFileStore#type
はの場所を返します。ドライブのデバイスファイル。私が知る限り、ドライブの場所を持つ唯一の方法は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
@Trejkaz私はあなたがそれをすることができたか分からなかった。これは、ドライブが文字としてマウントされる標準的なケースで機能します。少なくともUbuntuでは、/ mediaにデフォルトでマウントされます。また、/ etc/mtabを使用して、Linuxシステム上でより柔軟な作業をすることもできます(私は実際にWindowsをそれほど使用しないので、別のものを知りません)。 – Jeffrey