2011-11-20 3 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

どのファイルを削除しますか? BufferedReaderは、特定の入力ストリームにバインドされることを意図しています。一旦それらを閉じると、それらを再利用することはできません。 – soulcheck

+6

ファイルを削除するために本当に* brを閉じる必要はありません。 –

+1

ファイルから読み込み、ある時点で 'BufferedReader'を使用して、' BufferedReader'を閉じて、ファイルストリームからより多くを読み込むと、いくつかのバイトが見付かりません。これらのバイトはバッファされたリーダーによって消費されます(バッファするため)。別の方法を見つける必要があります。 なぜReaderサブクラスからスキャナに移動する必要がありますか?いくつかのAPIの制限?どちらの場合でも、例えば、RandomAccessFileやカスタムのScannerサブクラスを使用するなど、Readerのやり方を変えるなど、さまざまなことができます。 –

答えて

2

あなたが必要とするように見える:あなたはのFileInputStreamを使用しているとき、それをしないので、その後System.inの周りにあなたの読者を行う前に

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

ラップ、そしてすべてが、うまくなります。

+0

私はそれをどのように正確に行うのですか? –

+0

あなたは '新しいCloseShieldInputStream(System.in)'と言っています – bmargulies

+0

ありがとうございます。私はこれを回避する方法を使用して終了した、私はそのファイルを削除していない、私はちょうど正しい情報でそれを書き換えた:) –

0

System.inによってキーボードからの入力を取得したい場合は、静的なBufferedReaderを使用して、InputStreamReaderをラップしてください(System.inもラップしてください)。このよう :

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

とis.close();あなたのアプリケーションが終了する直前に必要になります。

関連する問題