当前位置: 首页 > 面试题库 >

如何使用System.in修复“ IOException:流关闭”异常?

葛嘉悦
2023-03-14
问题内容

我正在编写一个简单的程序,该程序使用读取和处理文件内容BufferedReader

BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );

System.out.println("Enter the file name to read");
String fileName = br.readLine();
br.close();

// Process file contents

br = new BufferedReader( new InputStreamReader(System.in) );
System.out.println("Enter another file name to read");
fileName = br.readLine();
br.close();

但是当我第二秒钟调用br.readLine()另一个文件名时,出现以下异常:

线程“主”中的异常java.io.IOException:流已关闭

我不知道如何System.in关闭流。我犯了什么错误,该如何解决?


问题答案:

由于您要先关闭流,所以流已关闭

br.close();

读取文件名后发出的问题。

不要关闭该阅读器,也不要为其创建新的阅读器System.in-只需重用该阅读器即可。但是,请使用其他文件读取文件。



 类似资料:
  • 问题内容: 我注意到,如果关闭,我将无法再从键盘插入输入,因为已经关闭了。无论如何,我可以保留(删除文件时需要它),然后从键盘添加更多输入吗? 问题答案: 看起来您需要: http://commons.apache.org/io/apidocs/org/apache/commons/io/input/CloseShieldInputStream.html 在制作读者之前,先将System.in环绕

  • 问题内容: 我试图将我的应用程序中较大且经常使用的部分重构为单独的方法,以使其易于维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了Scanner和System.in,但是当我关闭Scanner时,我也关闭了System.in。 所以我的问题是,我只能通过用CloseShieldInputStream屏蔽System.in来防止System.in关闭,还是应该开始将Scanner传递给方

  • 我试图将应用程序中大量且经常使用的部分重新划分为不同的方法,以使其更容易维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了扫描仪和系统。但当我关闭扫描仪时,我也会关闭系统。在里面 所以我的问题是,我只能阻止系统。通过使用CloseShieldInputStream屏蔽它来关闭,还是我应该开始向方法传递一个扫描器?

  • 问题内容: 我想做上面链接中提到的相同练习。但是,尽管重新分配喜欢从标准输入中读取内容,但在成功关闭之后我还是尝试使用时遇到了麻烦。 关闭后,我不能像上面一样重新分配给Scanner对象并使用它吗? 问题答案: 切勿靠近既不也没有。这将起作用并引起一些奇怪的效果。实际上,您将永远无法分别读写SYSOUT的SYSIN。查找其他解决方案。 如果您需要建议如何在不关闭的情况下解决问题,请提供有关应用程序

  • 问题内容: 这是我目前拥有的代码: 一切都会按预期进行(调用writeToFile方法时将文件写入)。但是,当第二次调用writeToFile方法时,出现以下错误: 该文件仍按预期第二次写入,但是它将在第二次以及以后对writeToFile()的调用中引发此错误。我想知道是什么导致此错误发生。 问题答案: 写完后就在打电话。流关闭后,将无法再次写入。通常,实现此目标的方法是将结束状态移至write

  • 每个人 都。我正在编写一个函数,该函数使用类 httpURL 连接连接到服务器。在代码中,我建立了一个连接,按顺序调用了获取输出流()和获取输入流()方法。然后我断开连接。在此之后,我尝试获取通过 getInputStream() 方法获得的数据,但编译器提醒 NullPointer 异常。 代码如下: 在调试尝试之后,当我将断开连接行移到finally模块的最后一行时,一切都会好起来。但我感到困