查找Java中的所有驱动器号
对于一个我正在从事的项目。我需要在文件系统上寻找可执行文件。对于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 ...等)