我发现,我们可以使用System.getProperty("java.version")
找到Java版本。
从这里 - Getting Java version at runtime
但我已经使用Runtime.getRuntime().exec(commands)
-
String[] commands ={"java", "-version"};
String line;
String cmdOutput = "";
try {
Process process = Runtime.getRuntime().exec(commands);
process.waitFor();
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = input.readLine()) != null) {
cmdOutput += (line + "\n");
}
System.out.println("output "+cmdOutput);
input.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
但是输出空白。
当我从命令提示符运行java -version
时,我们得到版本,我觉得它也应该返回相同的输出。
在我丢弃它并使用System.getProperty("java.version")
之前,我能否知道我在这里缺少什么?
提前致谢。
答案 0 :(得分:1)
您的代码中没有版本,因为: java -version 打印到错误流,而不是stdout,我不知道为什么。
您可以通过以下方式显示:
java -version > output.txt
并且看到它仍然打印到你的控制台,并且output.txt中没有任何内容。
或者用:
java -version 2> error.txt
并看到没有打印任何内容,版本信息在error.txt
中这里询问了为什么会发生这个问题:Why does 'java -version' go to stderr?
答案 1 :(得分:0)
public static String getJavaVersion()
{
String method = "getJavaVersion";
String javaVersion = "";
try
{
// Command: wmic datafile where name="C:\\Windows\\System32\\msiexec.exe" get Version /value
Process process = Runtime.getRuntime().exec("java -version");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
javaVersion = reader.readLine();
System.out.println("Method: "+method+" - "+javaVersion);
while(javaVersion!= null)
{
if(javaVersion.trim().startsWith("Version"))
{
System.out.println("Method: "+method+" - "+javaVersion);
return javaVersion;
}
javaVersion=reader.readLine();
}// end while
}
catch (IOException e)
{
System.out.println("Method: "+method+" Could not check version "+e);
e.printStackTrace();
return "";
}
return javaVersion;
}