[英]Command is not running while running using java
我想使用Java程序在Termninal(Ubuntu)中运行命令
在网上冲浪后,我发现了使用Java执行命令的方法
以下是在ubuntu中查找ldd版本的代码
String[] command = { "ldd", "--version" };
ProcessBuilder probuilder = new ProcessBuilder(command);
Process process = probuilder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
process.waitFor();
// System.out.println(br.readLine());
while ((line = br.readLine()) != null) {
System.out.println(line);
}
在上面的代码中,我试图在ubuntu中使用Java找出“ ldd verison”。 工作正常,我得到了ldd版本。
但是,当我尝试以相同的方式找到我的ubuntu的Java版本时。 该代码未返回任何内容,因为br.readline为空。 我是亚伯找出ldd vesion, 为什么不是Java版本?
以下是使用Java在ubuntu中查找Java版本的代码
String[] command = { "java", "-version" };
ProcessBuilder probuilder = new ProcessBuilder(command);
Process process = probuilder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
process.waitFor();
// System.out.println(br.readLine());
while ((line = br.readLine()) != null) {
System.out.println(line);
}
请有人帮助我找出如何在ubuntu中使用Java代码查找Java版本。
不幸的是,这是Java的实现方式。 看来Java的-version
选项是通过stderr
而不是通常的stdout
打印的
参考: 为什么“ java -version”进入stderr?
这种现象解释了为什么您的子进程运行命令,但是似乎所有内容都通过stderr通道打印出来了,好像您没有执行命令失败,但是当您通过process.getErrorStream()
转储错误流时,您会看到版本文本。
您应该能够通过“ java.version ”系统属性获取Java版本号。
例:
System.out.println( System.getProperty("java.version") );
输出:
1.8.0_51
您可能对可以打印的其他Java相关属性感兴趣,例如运行时和产品构建版本等。
请参阅: http : //www.oracle.com/technetwork/java/javase/versioning-naming-139433.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.