gpt4 book ai didi

java - 如何以编程方式获取任何给定 java 路径的 Java 版本?

转载 作者:行者123 更新时间:2023-12-01 19:44:53 28 4
gpt4 key购买 nike

我有一个应用程序和该应用程序的安装程序,都是用 Java 编写的。

在安装过程中,用户必须定义​​他稍后想要用于应用程序运行时的Java 主目录的路径。这可能是我的安装程序当前运行的 JRE 之外的另一个 JRE,而且不一定是 JAVA_HOME 路径。

因此,要获取实际应用程序应运行的用户定义的目标 Java 版本,我不能简单地调用 System.getProperty("java.runtime.version") 在我的安装程序代码中,因为这为我提供了当前运行安装程序的 JRE 版本。

当我只有 JRE 的路径时,是否有任何通用方法可以以编程方式获取 JRE 的 Java 版本?也许有一个单独的类加载器?或者读取任何 META-INF 或读取该 JRE 库中的任何类?

最佳答案

好吧,在阅读您的评论后,我已经编写了执行 java -version

的代码
ProcessBuilder pb = new ProcessBuilder("java", "-version");
pb.directory(new File(System.getProperty("user.home")));
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String javaVersion = reader.readLine();
System.out.println(javaVersion.substring(javaVersion.indexOf("\"") + 1, javaVersion.lastIndexOf("\"")));

您也可以使用确切的路径来调用它

ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Java\\jdk1.8.0_181\\bin\\java", "-version");

这会将 java 版本输出为 1.8.0_181

感谢 Andreas Hauschild 指出 release 文件包含该版本我编写了代码来解析该文件中的版本,因此请使用它。如果您不想执行命令并想从 release 文件获取 java 版本,我编写了一段代码来解析其中的版本

public static String getJavaVersion(String javaPath) throws IOException {
File releaseFile = new File(javaPath, "release");
BufferedReader bufferedReader = new BufferedReader(new FileReader(releaseFile));
String version = bufferedReader.readLine();
return version.substring(version.indexOf("\"") + 1, version.lastIndexOf("\""));
}

您可以使用以下方式调用它

String version = getJavaVersion("C:\\Program Files\\Java\\jdk1.8.0_181");

关于java - 如何以编程方式获取任何给定 java 路径的 Java 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742715/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com