ccat
2009-07-24 17:33
浏览 321
已采纳

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进行测试可以打印出正确结果。

不知道哪有问题。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • fdsafds 2009-07-25 11:53
    已采纳

    [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]

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • fdsafds 2009-07-24 17:34

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

    评论
    解决 无用
    打赏 举报
  • fdsafds 2009-07-24 17:37

    [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]

    评论
    解决 无用
    打赏 举报
  • iteye_20589 2009-07-24 17:38

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

    评论
    解决 无用
    打赏 举报
  • layer555 2009-07-24 22:15

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

    评论
    解决 无用
    打赏 举报
  • fdsafds 2009-07-25 11:53

    [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();

    评论
    解决 无用
    打赏 举报
  • fdsafds 2009-07-25 12:01

    单独运行那个exe 了

    评论
    解决 无用
    打赏 举报
  • fdsafds 2009-07-25 12:02

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

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题