用 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); 调整里的秒数