java - 如何使用 bash 将输入通过管道传输到 Java 程序

标签 java bash input pipe

我的 Java 程序正在监听标准输入:

InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
while(true){
    try {
        String inputStr = null;
        if((inputStr=bufReader.readLine()) != null) {
            ...
        }
        else {
            System.out.println("inputStr is null");
        }
    }
    catch (Exception e) {
        ...
    }
}

现在,我想通过 bash 将输入通过管道传输到该程序。我尝试了以下方法:

echo "hi" | java -classpath ../src test.TestProgram

但它只是打印 inputStr is null 无限次。我做错了什么?

编辑 1:更新问题以包含更多代码/上下文。


编辑 2:

看起来我遇到了与此 OP 相同的问题:Command Line Pipe Input in Java

如何修复程序以便我可以通过管道输入进行测试,但正常运行程序将允许用户在标准输入上输入输入?

最佳答案

你有 while(true),所以你会得到无限循环。

在循环中的某处添加 break 是修复它的一种方法。但这不是一种好的风格,因为读者必须在循环中寻找它是否以及何时退出。

最好让你的 while 语句清楚地显示退出条件是什么:

String inputStr = "";
while(inputStr != null) {
    inputStr=bufReader.readLine(); 
    if(inputStr != null) {
        ...
    } else {
        System.out.println("inputStr is null");
    }
}

关于java - 如何使用 bash 将输入通过管道传输到 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5724646/

相关文章:

Java - 第一次使用构造函数 - 作业

java - 如何让hbox适合列标题?

linux - 输出自动更新到屏幕和文件的文本

linux - 这个 bash 文件名提取技术的用途?

javascript - 将 JavaScript 值设置为输入

javascript - 如何将输入类型 "number"限制为2的幂?

java - 如何从员工列表中打印特定月份加入的员工列表?

java - ArrayList add() 方法不起作用。无法添加另一个值并将其添加到 jTable

bash - 如何在 sudoers.d 文件中添加 DEBIAN_FRONTEND=noninteractive?

html - css渐变背景按钮