我正在使用ProcessBuilder
类在Windows和Linux上执行可执行文件。
有一种简单的方法可以在不知道可执行文件的目录路径的情况下找到这些可执行文件。
e.g。
//which command functionality
String executable = which("executable_name");
List<String> command = new ArrayList<String>();
command.add(executable);
ProcessBuilder builder = new ProcessBuilder(command);
..
..
如果有像linux上的which命令这样的函数会很棒吗?
任何想法或我将不得不使用
循环并解析PATH环境变量System.getenv("PATH");
答案 0 :(得分:1)
在Windows上使用where
命令。
WHERE [/R dir] [/Q] [/F] [/T] pattern
如果未使用/R
指定搜索目录,则会搜索当前目录以及PATH环境变量指定的路径。这是一个示例代码,用于查找notepad.exe
驻留在Windows上的两个位置。
String searchCmd;
if (System.getProperty("os.name").contains("Windows")) {
searchCmd = "where";
} else { // I'm assuming Linux here
searchCmd = "which";
}
ProcessBuilder procBuilder = new ProcessBuilder(searchCmd, "notepad.exe");
Process process = procBuilder.start();
ArrayList<String> filePaths = new ArrayList<String>();
Scanner scanner = new Scanner(process.getInputStream());
while (scanner.hasNextLine()) {
filePaths.add(scanner.nextLine());
}
scanner.close();
System.out.println(filePaths);
的输出:强> 的
[C:\Windows\System32\notepad.exe, C:\Windows\notepad.exe]
注意:我只在Windows上测试了这个。您可能必须修改(可能是命令选项以及解析哪个输出的方式)以使其在Linux上运行。