使用 ProcessBuilder 查找 Java 的版本
Using ProcessBuilder to find version of Java
我正在尝试使用 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);
}
然而,当这是 运行 时,while 循环永远不会执行,因为 stdInput 为空。如果我取出 commands.add("-version")
,它将获得在命令行上使用 运行ning "java.exe" 命令时输出的输入,因此似乎添加 -version
参数会导致问题这也表明目录和 java.exe 命令是正确的。任何帮助,将不胜感激。
java -version
的输出被发送到错误流 - 从该流读取应该产生正确的输出:
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getErrorStream()));
或者,您可以调用 redirectErrorStream(true)
合并输入流和错误流。如果您只想打印到命令行,您可以在 ProcessBuilder 上使用 inheritIO
。
通过检索适当的 System property
,无需 ProcessBuilder
即可找到当前的 运行 java 版本
System.out.println(System.getProperty("java.version"));
java -version
打印到标准错误。尝试使用:
ProcessBuilder pb = new ProcessBuilder(commands).redirectErrorStream(true);
这会将 stderr 放入与 stdout 相同的流中,其余代码看起来就像现在一样。
我正在尝试使用 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);
}
然而,当这是 运行 时,while 循环永远不会执行,因为 stdInput 为空。如果我取出 commands.add("-version")
,它将获得在命令行上使用 运行ning "java.exe" 命令时输出的输入,因此似乎添加 -version
参数会导致问题这也表明目录和 java.exe 命令是正确的。任何帮助,将不胜感激。
java -version
的输出被发送到错误流 - 从该流读取应该产生正确的输出:
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getErrorStream()));
或者,您可以调用 redirectErrorStream(true)
合并输入流和错误流。如果您只想打印到命令行,您可以在 ProcessBuilder 上使用 inheritIO
。
通过检索适当的 System property
,无需ProcessBuilder
即可找到当前的 运行 java 版本
System.out.println(System.getProperty("java.version"));
java -version
打印到标准错误。尝试使用:
ProcessBuilder pb = new ProcessBuilder(commands).redirectErrorStream(true);
这会将 stderr 放入与 stdout 相同的流中,其余代码看起来就像现在一样。