首页 > 解决方案 > BufferedReader 卡在最后一个输入行而不结束程序

问题描述

BufferedReader用来从System.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();
    }
}

标签: javabufferedreaderinputstreamreadersystem.in

解决方案


这是等待可用数据的另一种方法(参考:Java 11 - 方法 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

推荐阅读