使用ProcessBuilder查找Java版本

Mat*_*nes 0 java processbuilder

我正在尝试使用Java来查找计算机上安装的Java版本.我有:

List<String> commands = new ArrayList<String>();
commands.add("java.exe");
commands.add("-version");
ProcessBuilder pb = new ProcessBuilder(commands);
pb.directory(new File("C:\\Program Files\\Java\\jdk1.6.0_45\\bin"));
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

但是,运行此命令时,由于stdInput为空,因此永远不会执行while循环.如果我取出commands.add("-version")它,它将获得在命令行上运行"java.exe"命令时输出的输入,因此似乎添加-version争论导致问题,这也表明目录和java.exe命令是正确的.任何帮助,将不胜感激.

cop*_*peg 6

输出java -version被发送到错误流 - 从该流读取应该导致正确的输出:

BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getErrorStream()));
Run Code Online (Sandbox Code Playgroud)

或者,您可以调用redirectErrorStream(true)合并输入和错误流.如果您只想打印到命令行,可以inheritIO在ProcessBuilder上使用.

ProcessBuilder通过检索适当的System属性,可以找到当前运行的java版本,而无需通过检索

System.out.println(System.getProperty("java.version"));
Run Code Online (Sandbox Code Playgroud)