从java代码获取cmd命令的输出

我有一个程序,我能够从我的代码成功执行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来检查第一个命令是否工作正常,但是如果这个类产生了一些错误,我怎么能看到这个错误呢?

Solutions Collecting From Web of "从java代码获取cmd命令的输出"

你需要你的Process的OutputStream(InputStream)(你应该使用ProcessBuilder)…就像这样

 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; try { // Use a ProcessBuilder ProcessBuilder pb = new ProcessBuilder(cmd1); Process p = pb.start(); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } int r = p.waitFor(); // Let the process finish. if (r == 0) { // No error // run cmd2. } } catch (Exception e) { e.printStackTrace(); } } 

从命令返回的一般示例是:

  Process p = null; try { p = p = r.exec(cmd2); p.getOutputStream().close(); // close stdin of child InputStream processStdOutput = p.getInputStream(); Reader r = new InputStreamReader(processStdOutput); BufferedReader br = new BufferedReader(r); String line; while ((line = br.readLine()) != null) { //System.out.println(line); // the output is here } p.waitFor(); } catch (InterruptedException e) { ... } catch (IOException e){ ... } finally{ if (p != null) p.destroy(); } 

看看这里: 在ThreadInterrupted的情况下提取进程的退出代码

你需要得到返回代码…你必须等待它。