Java 正在关闭BufferedReader和System.in

Java 正在关闭BufferedReader和System.in,java,input,bufferedreader,system.in,Java,Input,Bufferedreader,System.in,我注意到,如果我关闭BufferedReader,我将无法再从键盘插入输入,因为System.in以某种方式被关闭。我是否可以保留br.close()(我需要它来删除文件),然后从键盘添加更多输入?看起来您需要: 在制作读取器之前,先将System.in包装起来,这样一切都会好起来,因为当您使用FileInputStream时,您不会这样做。如果您只想通过System.in从键盘获取输入,请使用静态BufferedReader包装InputStreamReader(也包装System.in)。

我注意到,如果我关闭
BufferedReader
,我将无法再从键盘插入输入,因为
System.in
以某种方式被关闭。我是否可以保留
br.close()
(我需要它来删除文件),然后从键盘添加更多输入?

看起来您需要:


在制作读取器之前,先将System.in包装起来,这样一切都会好起来,因为当您使用FileInputStream时,您不会这样做。

如果您只想通过System.in从键盘获取输入,请使用静态BufferedReader包装InputStreamReader(也包装System.in)。 像这样:

Reader rdr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(rdr);
String s;
s = br.readLine();
br.close();
Scanner sc = new Scanner(System.in);
s = sc.nextLine();
System.out.print(s);

是.close()
;在您的应用程序终止之前需要。删除哪个文件?BufferedReader意味着绑定到特定的输入流。一旦你关闭它们,你就不能再使用它们。你真的不需要关闭
br
来删除一个文件。如果你从一个文件中读取,并且使用
BufferedReader
到某个点,然后关闭
BufferedReader
,然后从文件流中读取更多的内容,你将丢失一些字节。这些字节由缓冲读取器消耗(以便缓冲)。你需要找到另一种方法。为什么需要从Reader子类转换为Scanner?一些api限制?在这两种情况下,您都可以做不同的事情,例如使用
RandomAccessFile
和/或自定义的Scanner子类,它也可以做阅读器的事情。我正在使用BufferedReader读取该文件。然后我需要删除它。如果不关闭BufferedReader,我将无法删除该文件(file.delete()返回false)。您可以说“new CloseShieldInputStream(System.in)”谢谢。我最终用了一种方法来解决这个问题,我没有删除那个文件,我只是用正确的信息重新编写了它:)
 Public BufferedReader is = new BufferedReader(new InputStreamReader(System.in));