Java: чтение файла из стандартного ввода, затем запрос пользователя для ввода - PullRequest
0 голосов
/ 26 мая 2019

Я пишу программу на 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...