查找Java中的所有驱动器号

时间:2020-03-05 18:49:52  来源:igfitidea点击:

对于一个我正在从事的项目。我需要在文件系统上寻找可执行文件。对于UNIX派生类,我假定用户将文件包含在强大的$ PATH变量中,但是Windows上没有这样的东西。

我可以放心地假设该文件在文件系统中的深度最多为2个级别,但是我不知道它将在什么驱动器上。我必须尝试所有驱动器,但无法弄清楚如何列出所有可用的驱动器(已为其分配了字母)。

有什么帮助吗?

编辑:我知道有一个%PATH%变量,但是它不像UNIX系统中那样集成。例如,我要查找的应用程序是OpenOffice。通常,此类软件不在%PATH%中。

解决方案

回答

当然,Windows中有一个" PATH"环境变量。

%PATH%
    This variable contains a semicolon-delimited list of directories in which the command interpreter will search for executable files. Equivalent to the UNIX $PATH variable.

回答

Windows确实确实具有PATH环境变量。它与Unix的语法不同,因为它使用分号(;)代替冒号(:)作为分隔符,并且我们必须注意可能包含空格的带引号的字符串。但是,它在那里。

如果该另一个程序的安装程序将其自己的目录添加到PATH环境变量中,则可以依靠该目录。但是,正如我们提到的,Windows安装程序通常不需要将应用程序路径添加到PATH,因为它们安装了开始菜单快捷方式或者其他方法。

对于Java中的驱动器号,一种方法是尝试所有驱动器号,最多只能有24个(C到Z)的任何用处。或者,我们可以掏空并运行" net use"并解析结果,尽管这有点麻烦。

回答

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listRoots()

File[] roots = File.listRoots();
for(int i = 0; i < roots.length ; i++)
    System.out.println("Root["+i+"]:" + roots[i]);

谷歌:列表驱动器的Java,第一次命中:-)

回答

看起来"无处不在"可能非常混乱。

看一下CD-ROM驱动器,它会旋转。那可能很吵。

查看网络驱动器,它可能非常慢。可能服务器已关闭,我们可能需要等待几分钟,直到服务器超时。

也许(对于Windows计算机)我们应该只看开始菜单。如果没有任何东西指向OOo,则可能未安装。如果是这样,则该用户可能是高级用户,将不会有任何手动指出位置的问题。

回答

使用JNI。
这对于C ++代码来说是完美的。
我们不仅可以列出所有驱动器,还可以获得相应的驱动器类型(可移动磁盘,本地磁盘或者cd-rom,dvd-rom ...等)