使用 java 捕获标准输出

Catch stdout using java

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

示范:

PROGRAM A start PROGRAM B, PROGRAM B 打印一些输出到控制台(使用System.println("...")),我如何从 PROGRAM A 控制台中的 PROGRAM B 输出捕获?

我的方法是:

启动程序 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() : "";
}

这是读取 /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();