如何以编程方式获取任何给定 java 路径的 Java 版本?
How to get Java version of any given java path programmatically?
我有一个应用程序和这个应用程序的安装程序,都是用 Java 编写的。
在安装过程中,用户必须定义 Java 主页 的路径,他以后想在 运行 时使用该应用程序.这可能是另一个 JRE,而不是我的安装程序当前 运行 的 JRE,也不一定必须是 JAVA_HOME
路径。
因此,要获取用户定义的 目标 Java 实际应用程序应 运行 的版本,我不能简单地调用 System.getProperty("java.runtime.version")
在我的安装程序代码中,因为这为我提供了当前 运行 宁 安装程序 .
的 JRE 版本
当我只有 JRE 的路径时,是否有任何通用方法以编程方式获取 JRE 的 Java 版本?也许有一个单独的 class 装载机?或者阅读任何 META-INF 或阅读该 JRE 库中的任何 class?
好的,在阅读了您的评论后,我已经编写了执行 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 的安装目录,您可以阅读 "release" 文件。
位于安装根目录(例):
C:\Program Files\Java\jre1.8.0_191\release
C:\Program Files (x86)\Java\jre1.8.0_191\release
内容如下:
JAVA_VERSION="1.8.0_191"
OS_NAME="Windows"
OS_VERSION="5.2"
OS_ARCH="amd64"
我有一个应用程序和这个应用程序的安装程序,都是用 Java 编写的。
在安装过程中,用户必须定义 Java 主页 的路径,他以后想在 运行 时使用该应用程序.这可能是另一个 JRE,而不是我的安装程序当前 运行 的 JRE,也不一定必须是 JAVA_HOME
路径。
因此,要获取用户定义的 目标 Java 实际应用程序应 运行 的版本,我不能简单地调用 System.getProperty("java.runtime.version")
在我的安装程序代码中,因为这为我提供了当前 运行 宁 安装程序 .
当我只有 JRE 的路径时,是否有任何通用方法以编程方式获取 JRE 的 Java 版本?也许有一个单独的 class 装载机?或者阅读任何 META-INF 或阅读该 JRE 库中的任何 class?
好的,在阅读了您的评论后,我已经编写了执行 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 的安装目录,您可以阅读 "release" 文件。
位于安装根目录(例):
C:\Program Files\Java\jre1.8.0_191\release
C:\Program Files (x86)\Java\jre1.8.0_191\release
内容如下:
JAVA_VERSION="1.8.0_191"
OS_NAME="Windows"
OS_VERSION="5.2"
OS_ARCH="amd64"