我有一个程序,我能够成功地从我的代码中执行cmd命令,但是我想能够获取cmd命令的输出。我该如何做呢?
到目前为止,我的代码是:
Second.java:
public class Second {
public static void main(String[] args) {
System.out.println("Hello world from Second.java");
}
}
以及 Main.java
public class Main {
public static void main(String[] args) {
String filename = args[1].substring(0, args[1].length() - 5);
String cmd1 = "javac " + args[1];
String cmd2 = "java " + filename;
Runtime r = Runtime.getRuntime();
Process p = r.exec(cmd1); // i can verify this by being able to see Second.class and running it successfully
p = r.exec(cmd2); // i need to see this output to see if
System.out.println("Done");
}
}
我可以通过检查Second.class来确认第一个命令是否成功执行,但是如果该类生成了一些错误,我怎么能看到这些错误?
command
;”的东西,Java需要20行代码、一个进程构建器、一个缓冲读取器等等?这种过度抽象甚至不是全部故事--这段代码会泄露资源,因为流从未关闭... - TheOperatoroutput=$(command)
;不同的语言有不同的方式(例如,Java 不是一种 脚本 语言)。此外,在上面的示例中,资源会在main
退出时关闭。 - Elliott Frischpopen(3)
),(缓冲)读取器(fscanf
),循环,IO异常甚至更多样板文件。使用Scala,您可以创建一个自定义DSL来像脚本语言一样包装此功能;但是这**是Java。 - Elliott FrischString exec(String command)throws IOException
中,这表明这不是语言固有的问题,而是库/设计问题。更重要的是,在Java中,为了完成简单任务而使用荒谬复杂的结构常常被社区视为“前进的方向”,而不是受到质疑和潜在改进。 - TheOperator