8

背后的故事...

我真的很喜欢看电视节目,但我每个月只回家两次。其余时间我住在没有互联网的房子里(虽然离我的大学很近,所以免费的无线网络很棒!-当它工作时-)所以我需要一个能够用我的新节目更新我的便携式硬盘的小软件当我回家时,与播客同步的文件服务器完成了它的工作。我使用 Java 完成了它并且它有效。

问题

现在我有一个.properties文件,我在其中存储了那个 usb hd 的挂载目录。不够。我希望该软件能够发现所有 USB 大容量存储设备,并让用户选择使用哪一个来存储文件。我怎样才能做到这一点?

细节

a)它必须是Java(我的意思是,它也可以与执行本地主机命令dir或类似的东西一起使用)

b) 我的服务器在 Windows 上,但我更喜欢它是独立于操作系统的解决方案

4

3 回答 3

3

虽然我没有在您的问题中看到它,但我认为您非常熟悉 File.listRoots() 方法,该方法返回一个很好的文件根数组。

然后,您可以遍历它们,并尝试识别它们是否是闪存驱动器。一些黑客可能是这样的:

File[] roots = File.listRoots();

if (roots == null) {
  // you have a different problem here.  Is it even a computer we are talking about?
}

// Iterate through roots
for (File root : roots) {
    if (root.canWrite()) {  // Or, you could use File.createTempfile with that folder
        // if root does not contain some well know files
        // Or, if root contains some well known files
        // Based on these 2 hacks, or possible other characteristics, you may be reasonably sure
    }
}

这就是我所能提供的。使用更多本机程序可以完成更多工作,然后从 Java 程序中调用它们。

于 2010-09-30T15:48:13.450 回答
2

您可以检查javax.usb项目。目前有两个经过认证的实现,用于 Linux 和 BSD,以及一个用于 Windows 的实现(看起来,它仍然不完整,但我想它允许您列出连接的 USB 设备)。

但我不确定仅列出 USB 驱动器(而不是所有驱动器,如@Amrinder Arora答案)的可能性是否值得采用新的库集并努力实现半完整的实现......

于 2010-10-01T09:16:11.347 回答
2

nio 提供了一个漂亮的方式。看一下这个:

import java.nio.file.*;
for(Path p:FileSystems.getDefault().getRootDirectories()){
    System.out.println(p);
}

您将获得所有根作为路径对象;

于 2014-02-28T10:41:40.317 回答