我正在寻找一种方法来检测U盘是否已插入电脑。目前,我找到的解决方案是轮询
给我输出了这个结果:
事实证明,
这里是否有什么我错过的东西或者纯粹使用Java不可能做到这一点?
系统信息:
FileSystem#getFileStores
以查看变化。这确实告诉我U盘何时被插入,但据我所知,没有办法检索其位置。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