Java:从stdin读取文件,然后提示用户输入

时间:2019-05-26 18:01:46

标签: java stdin

我正在编写一个Java程序,该程序从stdin中读取文件,然后提示用户进行交互式输入。它应该像这样执行:

cat file.txt | java -jar myprog.jar
#
# ...Read file.txt then prompt user:
#
Some input please: 

问题在于,在阅读file.txt之后,stdin似乎“用完了”,我不知道如何还原它以获取用户的输入。这是我要执行的操作的示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line = br.readLine()) != null) {
            // Do something with line
            System.out.println(line);
        }
        br.close();

        Scanner scanner = new Scanner(System.in);
        String input= scanner.nextLine();

    }
}

执行时,我得到:

echo -e "foo\nbar\nbaz" | java -jar biojava-tmp.jar 
foo
bar
baz
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
    at biojava_tmp.Main.main(Main.java:21)

我该如何解决?


PS:在我的真实程序中,我不使用Scanner,而是按如下方式使用jline,但我认为问题是相同的。

ConsoleReader console= new ConsoleReader();
console.readLine()

0 个答案:

没有答案