java调用dos命令,如何将结果返回给java?

用 Process p = Runtime.getRuntime().exec(cmd); 执行某命令后,在dos窗口中有一大段结果,java如何获得这个结果呢?

[b]问题补充:[/b]
:o 我没说清楚,是执行的某一exe文件,并不是执行 “cmd”这个命令。

String[] cmd = {"cmd", "/k start d:\rm\"+o};
其中String o 为 exe 程序名 后面带有参数。

这个exe本身在dos下执行,执行完毕在dos窗口内打印执行结果。

我的目的是取得打印的结果。

按pan_java的方法只能得到我的java程序的运行目录。

[b]问题补充:[/b]
再次感谢 pan_java 对该问题的关注。我按照你新写的方法,结果为

[color=blue]
info

E:\workspace\RealMediaEditorRCP>
error info
[/color]

打印出的是java程序的路径。

我用ipconfig进行测试可以打印出正确结果。

不知道哪有问题。

[code="java"]public class Test {

public static void main(String args[]) throws IOException,
        InterruptedException {
    Process p = Runtime.getRuntime().exec("javac");
    Thread.sleep(5000);
    InputStream in = p.getInputStream();
    //有错误时
    InputStream err = p.getErrorStream();
    byte[] barry = new byte[in.available()];
    byte[] errarry = new byte[err.available()];
    in.read(barry);
    in.close();
    err.read(errarry);
    err.close();
    String str = new String(barry);
    String errstr = new String(errarry);
    System.out.println("info");
    System.out.println(str);
    System.out.println("error info");
    System.out.println(errstr);

}

}[/code]

[code="java"]Process p = Runtime.getRuntime().exec("cmd");
InputStream in = p.getInputStream();[/code]

[code="java"]import java.io.IOException;
import java.io.InputStream;

public class Test {

public static void main(String args[]) throws IOException, InterruptedException{
    Process p = Runtime.getRuntime().exec("cmd"); 
    Thread.sleep(2000);
    InputStream in = p.getInputStream();
    byte[] barry = new byte[in.available()];
    in.read(barry);
    in.close();
    String str = new String(barry);
    System.out.println(str);

}

}[/code]

1.[url]http://download.csdn.net/source/294922[/url]
2.可以咨询下面这个问问题的人..
[url]http://www.iteye.com/problems/19786[/url]

楼上的例子完全正确,确实时通过p.getInputStream()读读取返回结果;不过在某些情况下,最好使用单独的线程来读取返回结果(如果直接在主线程读取有时候会发生阻塞,导致程序无法正确运行);然后主线程使用process.waitfor来等待程序返回;然后再获取到返回结果;

[code="java"]public class Test {

public static void main(String args[]) throws IOException, InterruptedException{
    Process p = Runtime.getRuntime().exec("c:\\jad\\jad.exe"); 
    Thread.sleep(10000);
              //错误时
              //InputStream in = p.getErrorStream();
    InputStream in = p.getInputStream();
    byte[] barry = new byte[in.available()];
    in.read(barry);
    in.close();
    String str = new String(barry);
    System.out.println(str);

}

}[/code]

有两种问题会引起这样
1.Thread.sleep(10000); 等待太小了,返回执行完就返回了输入流为空.改大点.
2.有可能是执行错误,InputStream in = p.getErrorStream();

单独运行那个exe 了

你运行一下 javac 就可以了 ,他是 exe 方法

Thread.sleep(5000); 调整里的秒数