先上代码
Process p = Runtime.getRuntime().exec(cmdlines);
String line;
BufferedReader input =new BufferedReader(new InputStreamReader(p.getInputStream()));
//读取屏幕输出
while ((line = input.readLine()) != null) {
System.out.println("java print:"+line);
}
//关闭输入流
input.close();我想问下为什么这个只能获取系统级别的CMD命令  比如  PING,我执行JAVA -VERSION就获取不到结果呢

解决方案 »

  1.   

    我想获取 java -version 的返回要怎么弄呢?
      

  2.   

    执行cmd指令的话,不要这么运行,这样你不能保证他的输入输出流是理想状态
    你可以去"包裹"一个CMD来达到你的目的
    String cmdlines = "dir";
    Process p = Runtime.getRuntime().exec("cmd");  OutputStream os = p.getOutputStream();
     InputStreamReader input =new InputStreamReader(p.getInputStream(),"GBK");
     
     os.write(cmdlines.getBytes());
     os.flush();
     os.close();
     
     char[] buf = new char[1024];
     int size;
     StringBuilder sb = new StringBuilder();
     //读取屏幕输出
    while((size = input.read(buf)) != -1) {
    sb.append(buf,0,size);
    }
    System.out.println(sb.toString());
     //关闭输入流
    input.close();
      

  3.   

    楼上所说还是不行,我要收到JAVA -VERSION的输出,你的代码其实和我的本质是一样的
    都没有得到我想要的,我要的就是执行CMD的   java -version,获取它的版本信息
      

  4.   

    在顶顶,等待高人
    发现现在CSDN的人气越来越少了
    可能是现在的技术论坛越来越多了
      

  5.   

    汗那...给你提供个思路啊...你自己一点都不想一下的吗...
    import java.io.*;
    import java.nio.*;
    public class Test {

    public static void main(String[] args) throws IOException {
    new Test().testConsole();
    }

    private Process p = null;
    public void testConsole() {

    try {
    p = Runtime.getRuntime().exec("cmd");
    } catch (IOException e) {
    e.printStackTrace();
    System.exit(-1);
    }

    new ConsoleReturn(p.getInputStream()).start();
    new ConsoleReturn(p.getErrorStream()).start();
    new ConsoleOutput(p.getOutputStream()).start();
    }

    private class ConsoleOutput extends Thread {
    private OutputStream os;
    public ConsoleOutput(OutputStream os) {
    this.os = os;
    }

    @Override
    public void run() {
    InputStream console = System.in;
    InputStreamReader reader = null;
    try {
    reader = new InputStreamReader(console,"GBK");
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    BufferedReader br = new BufferedReader(reader);

    String cmd;
    PrintWriter pw = new PrintWriter(os);
    while(true) {
    try {
    cmd = br.readLine();
    } catch (IOException e) {
    e.printStackTrace();
    break;
    }

    if(cmd.equals("exit")) {
    break;
    } else {
    pw.println(cmd);
    pw.flush();
    }
    }
    pw.close();
    }
    }

    private class ConsoleReturn extends Thread {
    private InputStream is;
    public ConsoleReturn(InputStream is) {
    this.is = is;
    }
    @Override
    public void run() {
    InputStreamReader reader = null;
    try {
    reader = new InputStreamReader(is,"GBK");
    } catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
    }
    char[] buf = new char[1024];
    int size;
    while(true) {
    try {
    size = reader.read(buf);
    } catch (IOException e) {
    e.printStackTrace();
    break;
    }
    if(size != -1) {
    System.out.print(new String(buf,0,size));
    } else {
    break;
    }
    }
    try {
    reader.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }