我需要使用ProcessBuilder
执行java应用程序。我还需要在调用应用程序使用的被调用进程中使用相同的java可执行文件。
是否有一种独立于平台的方法来检索当前的java可执行文件路径和文件名?
我已经看到了类似的代码片段:
public static boolean isWindows() {
return (System.getProperty("os.name").toLowerCase().indexOf("win") >= 0);
}
public static String getJavaExecutablePath() {
String executable = "java";
if (isWindows()) {
executable = executable + ".exe";
}
File path = new File(System.getProperty("java.home"), "/bin/" + executable);
return path.getAbsolutePath();
}
上述代码可能需要改进才能使用File.separator
。
上述所有内容是否是必需的,或者还有其他需要考虑的因素,例如区分大小写?
理想情况下,会有一个可用于获取操作系统路径的库,但这可能是针对不同论坛的问题。
答案 0 :(得分:1)
首先,对您的要求最重要的是 System.getProperty(" java.home") ,您已经得到了它已经
其次,不要担心区分大小写,路径' $ JAVA_HOME / bin / java'在每个java版本中总是小写,并且已经有许多其他项目依赖于此。
最后,你不必使用' /'或者' \'建立绝对路径,考虑一下:
File path = new File(new File(System.getProperty("java.home"), "bin"), executable);
正如您所提到的, File.separator 做了类似的事情,但这是在谈论一个字符串,文件谈论文件。