【问题标题】:Return Windows cmd text from Java?从Java返回Windows cmd文本?
【发布时间】:2011-11-03 23:17:54
【问题描述】:

我想返回与在 Windows 的 cmd 提示符中手动键入命令时返回的文本相同的文本。这是一个工作的例子。

import java.io.IOException;

public class Test {

    public static void main(String[] args) throws IOException {
        String g = "";
        Runtime.getRuntime().exec(new String[] {"ipconfig", g});  
        System.out.println(g);
    }
}

我不知道我是否应该研究Runtime.getRuntime()exec,因为我理解 api (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html) 的方式是所有 exec 示例的方式,没有一个返回字符串。有些的返回值(如果我理解正确的话)实际上是一个“过程”,我只能猜测意味着什么都没有返回,但是这个过程已经开始了。我在示例中使用了 ipconfig,但实际上我需要运行各种诊断命令并分析字符串(我称之为“cmd 提示符”)。

【问题讨论】:

    标签: java windows exec


    【解决方案1】:

    要捕获命令的输出,您可以使用:

    Process p = Runtime.getRuntime().exec(new String[] {"ipconfig", g});
    InputStream s = p.getInputStream();
    
    BufferedReader in = new BufferedReader(new InputStreamReader(s));
    String temp;
    
    while ((temp = in.readLine()) != null) {
        System.out.println(temp);
    }
    

    请不要让 readLine() 方法在读取输入或进程终止之前会阻塞。

    【讨论】:

    • 谢谢。如何输出 getOutputStream() ?
    • 如何分配InputStream s = p.getOutputStream();。这是错误的。
    【解决方案2】:

    Java 字符串是不可变的,这意味着g 引用的"" 永远不会改变。没有分配g 的代码不会将空字符串以外的内容打印到 System.out。

    我建议您使用 Apache Commons 项目中的 Commons-Exec 库,而不是使用 Runtime.exec。它提供了一种更加更可靠的方法来执行外部应用程序(可靠地传递参数并防止诸如未读输出流锁定程序之类的事情)。

    您可以使用PumpStreamHandler 和您选择的输入流来捕获命令输出。

    【讨论】:

      【解决方案3】:

      如果您查看已经发布的 javadoc 链接,您会看到 Runtime.exec() 返回一个 Process 对象,并且 Process 类有一个方法 getOutputStream() 可以获取标准输出流新流程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-28
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多