以下程序:
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")