You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:32:06