0

我正在使用ProcessBuilder该类在 Windows 和 Linux 上执行可执行文件。

有没有一种简单的方法可以在不知道可执行文件的目录路径的情况下找到这些可执行文件。

例如

//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");
4

1 回答 1

1

where在 Windows 上使用该命令。

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 上运行。

于 2013-07-17T16:16:15.047 回答