2011-11-20 58 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();在你的應用程序終止之前需要。