BufferedReader 停留在最后输入行而没有结束程序

BufferedReader stuck at last input line without ending the program

我正在使用 BufferedReaderSystem.in(文本文件重定向上下文:< file.txt)读取数据,然后将其写入控制台。问题是我的程序显示了除最后一行之外的所有行,并且仍然可以在不执行任何操作的情况下运行。如果我手动结束它,它会写最后一行。

这是我的代码:

public void updateText() throws IOException {
    try {
    InputStreamReader inputStreamReader = new InputStreamReader(System.in);         
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

    String inputLine;
 
    while ((inputLine = bufferedReader.readLine()) != null) {

         System.out.println(inputLine);

    }
    
    inputStreamReader.close();
    bufferedReader.close();
        
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这里是等待可用数据的替代方法(参考:Java 11 - method BufferedReader.ready()):

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

class TestClass {
    public static void main(String[] args) {

        try (InputStreamReader inputStreamReader = new InputStreamReader(System.in);
             BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
            String line;
            // wait until data available
            while (!bufferedReader.ready()){
                while ((line = bufferedReader.readLine()) != null) {
                    System.out.println(line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例输出:

Hello world 
Hello world 
Hello world
Hello world

如果这仅发生在 Eclipse 中,您的问题很可能是 duplicate and bug 513713

当您可以一步传输数据时,您不需要逐行读取标准输入,替换 updateText():

的主体
System.in.transferTo(System.out);