方法:
public void find() {
String input = null;
BufferedReader bRead = new BufferedReader(new InputStreamReader(System.in));
try {
input = bRead.readLine();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
if(bRead != null) {
try {
bRead.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
出现错误:
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)
主要的:
public static void main(String args[]) {
B b = new B();
b.find();
b.find();
}
输入流必须在 section 中关闭finally
。怎么做才能不掉下来?
通过关闭 BufferedReader,您关闭了嵌套在其中的所有流。 这里有一个类似的例子,重用BufferedReader时抛出异常。异常:流关闭。为什么以及如何正确使用它?
删除
find()
方法中的 finally 块。并添加这样的方法close()
:}
主要的:
}
没有错误!也许所有的条件都不满足?
关闭
bRead
你从而关闭所有嵌套流。当您尝试重新阅读System.in
关闭时。因此,将流的关闭移动到一个单独的方法中,只有在 I/O 工作完成时才调用它!