gpt4 book ai didi

java - 查找 FileStore 的目录

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:51 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来检测何时将闪存驱动器插入我的计算机。到目前为止,我找到的解决方案是轮询 FileSystem#getFileStores进行更改。这确实告诉我何时插入了闪存驱动器,但据我所知,没有办法检索它的位置。 FileStore#typeFileStore#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 方法,但从中提取路径名似乎很危险,因为我不确定该特定解决方案的效果如何会支持其他操作系统和 future 版本的 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

最佳答案

在找到更好的解决方案之前,这是一个临时解决方案:

public Path getRootPath(FileStore fs) throws IOException {
Path media = Paths.get("/media");
if (media.isAbsolute() && Files.exists(media)) { // Linux
try (DirectoryStream<Path> stream = Files.newDirectoryStream(media)) {
for (Path p : stream) {
if (Files.getFileStore(p).equals(fs)) {
return p;
}
}
}
} else { // Windows
IOException ex = null;
for (Path p : FileSystems.getDefault().getRootDirectories()) {
try {
if (Files.getFileStore(p).equals(fs)) {
return p;
}
} catch (IOException e) {
ex = e;
}
}
if (ex != null) {
throw ex;
}
}
return null;
}

据我所知,此解决方案仅适用于 Windows 和 Linux 系统。

您必须在 Windows 循环中捕获 IOException,因为如果 CD 驱动器中没有 CD,则当您尝试为其检索 FileStore 时会抛出异常.这可能会在您遍历每个根之前发生。

关于java - 查找 FileStore 的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10678363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com