我有两个简单的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()通过管道生成的输出流值?
答案 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));
}
}