2011-11-20 101 views
5
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); 

我发现,如果我关闭BufferedReader,我将无法从键盘输入插入了,因为System.in由于某种原因关闭。无论如何,我可以保持br.close()(我需要为了删除文件),然后从键盘添加更多的输入?关闭的BufferedReader和System.in

+2

删除什么文件? BufferedReaders意味着绑定到特定的输入流。一旦你关闭它们,你就不能重用它们。 – soulcheck

+6

你真的*不需要关闭'br'来删除一个文件。 –

+1

如果您正在读取文件,并使用“BufferedReader”达到某一点,然后关闭“BufferedReader”,然后从文件流中读取更多内容,则会丢失一些字节。这些字节被缓冲读取器消耗(为了缓冲)。你需要找到另一种方式。 为什么您需要从Reader子类转到Scanner?一些API限制?无论哪种情况,您都可以采取不同的做法,例如通过使用“RandomAccessFile”和/或自定义的Scanner子类来实现Reader。 –

回答

2

看起来像你需要:

http://commons.apache.org/io/apidocs/org/apache/commons/io/input/CloseShieldInputStream.html

裹绕System.in让你的读者,然后一切都会好起来的,因为你不会做,当你使用一个FileInputStream之前。

+0

我到底该怎么做? –

+0

你说'新的CloseShieldInputStream(System.in)' – bmargulies

+0

谢谢。我最终使用了一种解决方法,我没有删除该文件,我只是用正确的信息重新编写了它:) –

0

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

Public BufferedReader is = new BufferedReader(new InputStreamReader(System.in)); 

and is.close();在你的应用程序终止之前需要。

相关问题