使用新的BufferedReader“java.io.IOException:Stream closed”

许多人问这样的问题,但这个问题有点不同。 这是代码:

public static BufferedReader reader; public static String readString() throws IOException { reader = new BufferedReader(new InputStreamReader(System.in)); String s = reader.readLine(); reader.close(); return s; } 

虽然多次调用程序运行时readString方法。 第二个调用导致exception: stream closed 。 我无法理解:为什么它最终如此? 每次我们声明新的BufferedReader 。 所以stream也必须是新的。 或不?

如果没有,我应该如何组织我的程序,以便在所有调用和程序结束后关闭读者?

因为System.in是同一个Objectpublic final static InputStream in; of System类)两个方法调用都在使用,在一个方法中关闭会自动关闭System.in以获取其他方法。 一旦你完成调用readString ,你应该从外面关闭BufferedReader因为我可以看到它是public ),因此它最终会关闭底层的System.in

关闭BufferedReader关闭System.in 。 您根本不应该关闭它,也不应该继续创建一个新的:您将丢失数据。 在整个过程中使用相同的一个。