使用java捕获stdout

时间:2015-02-15 11:38:36

标签: java stdout execute

最好的方法是什么,如何使用java捕获stdout

演示:

计划A 启动计划B 计划B 打印一些输出到控制台(使用System.println("...")),我怎样才能抓住来自 PROGRAM B 的控制台中的 PROGRAM A 输出?

我的方式是:

启动程序B并将输出重定向到文件(PROGRAM B > output.txt

还有更好的方法吗?

我希望,你理解我: - )

编辑:

我在互联网代码上发现了它的工作:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String program = "config_dir\\lib\\TestProject.jar";
    // Run a java app in a separate system process
    Process proc;
    try {
        proc = Runtime.getRuntime().exec("java -jar " + program + " a b c");
        // Then retreive the process output
        InputStream in = proc.getInputStream();
        InputStream err = proc.getErrorStream();
        System.out.println(convertStreamToString(in));
    } catch (IOException ex) {
        Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex);
    }


}                                        
private String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

1 个答案:

答案 0 :(得分:0)

这是读取/ bin / cat输出的最小代码量,它将文件复制到标准输出:

    ProcessBuilder pb = new ProcessBuilder( "/bin/cat", "some.file" );
    Process process = pb.start();
    InputStream is = process.getInputStream();
    int c;
    while( (c = is.read()) != -1 ){
        System.out.print( (char)c + "-" );
    }
    process.waitFor();