如何使cat命令输出通过管道传入Java Jar的String[] args参数?
解决Java程序通过管道读取标准输入的问题
管道传递的cat filename输出是标准输入(stdin),不会出现在String[] args里,要获取这些内容,直接读取标准输入流即可,以下是两种简便实现方式:
方式一:用Scanner逐行读取
适合小文件或简单场景,代码简洁:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { String line = scanner.nextLine(); // 替换为你的业务处理逻辑 System.out.println("读取到内容:" + line); } scanner.close(); } }
方式二:用BufferedReader读取(高效)
适合大文件,IO效率更高,推荐使用:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { // try-with-resources自动关闭流,无需手动处理 try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) { String line; while ((line = reader.readLine()) != null) { // 自定义处理逻辑 System.out.println("读取到:" + line); } } catch (IOException e) { e.printStackTrace(); } } }
补充说明
- 将上述代码编译打包成JAR后,执行
cat filename | java -jar jarname.jar,程序就能完整读取filename里的内容 - 命令行参数(
String[] args)仅接收跟在命令后的显式参数(比如java -jar jarname.jar param1 param2),管道传递的是标准输入流,属于完全不同的输入通道
内容的提问来源于stack exchange,提问作者Jack Sack
相关产品推荐
相关产品推荐

