Java Process Class:为什么命令"java -version"不产生输出流,而命令"ls -l"产生输出流?



以下程序:


public class ProcessExample {
public static void main(String[] args) throws IOException {
Process process1 = new ProcessBuilder("/bin/ls", "-l").directory(Path.of("/home/yapkm01").toFile()).start();
System.out.println("ls command:");
try (var in = new Scanner(process1.getInputStream())) {
while (in.hasNextLine()) {
System.out.println(in.nextLine());
}
}
Process process2 = new ProcessBuilder("/bin/java", "-version").start();
System.out.println("java command:");
try (var in = new Scanner(process2.getInputStream())) {
while (in.hasNextLine()) {
System.out.println(in.nextLine());
}
}
}
}

输出:

ls command:
total 424
drwxr-xr-x  2 yapkm01 yapkm01   4096 Dec 27  2021 Desktop
drwxr-xr-x  2 yapkm01 yapkm01   4096 Apr 30 01:09 Documents
drwxr-xr-x  2 yapkm01 yapkm01   4096 Jul  1 12:06 Downloads
-rw-r--r--  1 yapkm01 yapkm01   8980 Aug  3  2018 examples.desktop
java command:

请注意,process2没有java版本的输出。当然,当我手动操作它时,我会在下面。

yapkm01-/home/yapkm01):-$ java -version
openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
(yapkm01-/home/yapkm01):-$

问题:为什么java版本没有输出?

$ java --help | grep version
-version      print product version to the error stream and exit
--version     print product version to the output stream and exit
-showversion  print product version to the error stream and continue
--show-version
print product version to the output stream and continue

正如您所看到的,java -version打印到stderr,所以很明显您不会在stdout中看到输出。您需要使用java --version或捕获stderr

我认为这个问题实际上是关于学习如何运行基于名称"ProcessExample"的子流程。

然而,如果你真正想要的是你的程序正在运行的Java版本(当然,这不一定是任意"Java"命令行将使用的同一版本(,那么

String version = System.getProperty("java.version")

最新更新