使用`Runtime.getRuntime()。exec(commands)`获取Java版本

时间:2014-07-18 09:46:25

标签: java cmd

我发现,我们可以使用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")之前,我能否知道我在这里缺少什么?

提前致谢。

2 个答案:

答案 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;
  }