如何使用Bourne Shell将输入从Java程序传输到另一个程序

时间:2016-11-03 14:40:00

标签: java shell pipe

我有两个简单的Java程序,我想将“Test”的结果传递给“Test2”。

public class Test{
    public static void main(String args[]){
        System.out.println("Hello from Test");
    }
}

public class Test2{
    public static void main(String args[]){
        System.out.printf("Program Test piped me \"%s\"",args[0]);
    }
}

编译完两个.java文件后,我试图从终端

运行管道命令

java Test | java Test2 ,但是我得到一个ArrayIndexOutOfBoundsException,这意味着args数组没有初始化?

Test2应用程序如何获取Test.main()通过管道生成的输出流值?

2 个答案:

答案 0 :(得分:3)

一种方法是使用xargs:

java Test| xargs -I ARGS java Test2 ARGS

答案 1 :(得分:2)

管道将一个程序的标准输出连接到另一个程序的标准输入,而不是其他程序的命令行参数。

第二个类不会将管道输出作为其main方法的参数;它会将管道输出作为标准输入。所以你想阅读System.in

中的信息
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Test2 {
    public static void main(String args[])
    throws IOException {
        BufferedReader stdin =
            new BufferedReader(new InputStreamReader(System.in));
        stdin.lines().forEachOrdered(
            line -> String.format("Program Test piped me \"%s\"", line));
    }
}