gpt4 book ai didi

java - 使用 ProcessBuilder 查找 Java 版本

转载 作者:行者123 更新时间:2023-12-01 07:23:12 28 4
gpt4 key购买 nike

我正在尝试使用 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") ,它将获取在命令行上运行“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 - 使用 ProcessBuilder 查找 Java 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30628279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com