【问题标题】:Reading from BufferedReader throws exception as stream closed after creating a new BufferedReader [duplicate]在创建新的 BufferedReader 后,从 BufferedReader 读取会引发异常,因为流已关闭 [重复]
【发布时间】:2018-12-25 22:20:34
【问题描述】:

Following 是一种接受用户输入并返回响应的方法。

private String getValueFromUser(String propertyValue){
    String response = ""; 
    try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){
        response = br.readLine();
        if (response.equals("")){
            return propertyValue;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return response;
}

此方法在第一次调用时运行良好,但在后续调用中抛出以下异常。

java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170)
at java.io.BufferedInputStream.read(BufferedInputStream.java:336)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at com.ripple.utility.ConfigurationUtility.getValueFromUser(ConfigurationUtility.java:119)
at com.ripple.utility.ConfigurationUtility.createPropertiesDTO(ConfigurationUtility.java:108)
at com.ripple.utility.ConfigurationUtility.setProperties(ConfigurationUtility.java:169)
at com.ripple.utility.ConfigurationUtility.main(ConfigurationUtility.java:191)

有人可以帮忙解释一下代码的问题吗?

【问题讨论】:

  • 您不需要关闭 System.in,但您需要保留一个缓冲区,因为它可以读取尽可能多的可用数据,而不仅仅是您现在需要的最低限度。

标签: java bufferedreader ioexception


【解决方案1】:

BufferedReader 在 try-with-resources 块的末尾关闭时,System.in 也将关闭且无法重新打开。

您应该打开阅读器一次,并将其保持在您可以使用的地方,直到您的程序完成。

【讨论】:

  • @ShubhenduPramanik 因为你只运行过一次?
  • 创建如下所示的缓冲阅读器有效:try(BufferedReader br = new BufferedReader(new InputStreamReader(new NoCloseInputStream(System.in)))){}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2017-05-11
  • 2016-06-03
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多