使用 System.in 处理管道输入的数据并等待用户输入

问题描述 投票:0回答:1

我有一个java程序,我希望能够参与数据管道传输(例如,'(echo“dor = 4”; echo“dor * 2”)|程序'。也就是说,似乎系统.in 只能作为“不定” 流在使用时它开始为空,因为只要我愿意就可以接受用户输入。当我用它来处理管道输入的数据时,基本上在这样做之后就结束了。

经过一个多小时的痛苦,我得出的结论是,使用 Scanner(System.in) (或 RufferedReaders)等工具来处理管道输入的数据不允许我使用 System.in 流来等待用户输入。当我运行程序而不将数据传输到其中时,在声明“Scanner sc = new Scanner(System.in)”后使用 sc.nextLine() 只会在等待用户输入时阻塞,正如我希望的那样,但是当我这样做时将数据传递给它,nextLine()只会给我一个错误(“java.util.NoSuchElementException:找不到行”)。

如果不得不在其中之一之间做出选择,我在这里能做什么?

java stream java.util.scanner system.in
1个回答
0
投票

您可以编写应用程序,以便它首先从

System.in
读取输入,当该流关闭时,它开始从 java.io.Console

读取输入
for (Reader reader : new Reader[] { new InputStreamReader(System.in), System.console().reader()) {
    BufferedReader br = new BufferedReader(reader);
    String line;
    while ((line = br.readLine()) != null) {
        process(line);
    }
}

但是请注意,这是非常非常规的。用户通常期望应用程序从管道读取 从标准输入读取,而不是一个接一个地读取。

© www.soinside.com 2019 - 2024. All rights reserved.