当前位置: 首页 > 面试题库 >

查找文件存储的目录

邓翼
2023-03-14
问题内容

我试图找到一种方法来检测何时将闪存驱动器插入计算机。到目前为止,我发现的解决方案是轮询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方法就是该方法,但是从中提取路径名似乎很危险,因为我不确定该特定解决方案在其他操作系统上的性能如何。
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系统。

您必须抓住IOExceptionWindows循环,因为如果CD驱动器中没有CD,则在尝试为其检索CD时会引发异常FileStore。在遍历每个根之前可能会发生这种情况。



 类似资料:
  • #include <stdio.h> #include <time.h> int main(void) { time_t now = time(NULL); struct tm local = {0}; struct tm gmt = {0}; localtime_r(&now, &local); gmtime_r

  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我试图找到一个目录中存在的文件,而不是另一个目录中的文件,我尝试使用以下命令: 与上面的命令,它会找到这两个文件的问题,但不是还有文件而不是在, 我试图在文件中找到文件,但不仅在其中。 这是我的数据的一小部分样本 在我脑海里的另一个问题是,我怎么能找到的文件,而不是在或在一个单一的命令?

  • 实际工作中文件多了,可能就会忘掉它的位置,这个时候就可以使用 find 命令快速查找出文件所在目录的地址,提升了文件查找的效率。 1. 按照文件类型查找 使用 -type 参数可以查找不同类型的文件,其可以查找的文件类型如下: find -type 文件类型介绍 描述 f 普通文件 d 目录文件 l 符号链接文件 b 块设备文件 c 字符设备文件 p 管道文件 s 套接字文件 这里以查找 /hom

  • 问题内容: 在Python中,我可以使用哪些命令来查找: 1.当前目录(运行Python脚本时我在终端中的位置) 2.我正在执行的文件在哪里? 问题答案: 要获取包含Python文件的目录的完整路径,请在该文件中写入以下内容: (请注意,如果你已经习惯于更改当前的工作目录,则上述方法将不起作用,因为常量的值是相对于当前的工作目录而言的,并且不会被调用更改。) 要获取当前的工作目录,请使用 上面使用

  • 简介 Laravel 提供了一个强大的文件系统抽象,这得益于 Frank de Jonge 强大的 Flysystem 扩展包。Laravel 文件系统集成为使用本地文件系统、Amazon S3 和 Rackspace 云存储提供了简单易用的驱动程序。更棒的是,由于每个系统的 API 保持不变,所以在这些存储选项之间切换是非常简单的。 配置 文件系统的配置文件位于 config/filesyste

  • 厂商标识 标识 厂商 local 本地系统 aliyun-oss 阿里云 OSS 频道标识 标识 描述 public 用于公开图片,例如用户头像,或者不需要付费的任何图片使用 public 作为频道 创建上传任务 /api/v2/storage 请求内容参数: 参数 类型 描述 filename string 必须,文件原始名称(需要带上文件拓展名) hash string 必须,文件的 MD5