2017-04-07 7 views
0

txtファイルを読み込む際にBufferedReaderをランダムにリセットするときに問題があります。ファイル内の私の入力テキストの例は、number = 10;です。 コードの最後の部分System.out.println((char)c);1の代わりに;を出力します。

この単純な例で何が間違っていますか?
マイコード:あなたのコードと私はラインとしてnumber=10;を使用して作られたいくつかのダミー.txtファイルを使用してから、
BufferedReaderは常にファイルの最後の文字にリセットされます

String filePath = "data.txt"; 
BufferedReader br = new BufferedReader(new FileReader(filePath)); 
String line = ""; 
int c = 0; 
while ((c = br.read()) != -1) {  
    if((char)c == '1') { 
     br.mark(1000); 
    } 
    System.out.print((char)c); 
} 
br.reset(); 
c = br.read(); 
System.out.println((char)c); 
+0

マークを付けた後に1000文字以上読んでいますか? – ControlAltDel

+0

@ControlAltDelいいえ –

答えて

0

c = br.read()0を返します。

java.io.BufferedReader.mark(int)メソッドは、ストリーム内の現在の位置をマークします。 reset()を呼び出すと、ストリームはhereからこのポイントに再配置されます。

本質的に、それはあなたがマークとして割り当てた文字の後に文字を印刷します。

あなたが使用できる行の残りの部分を印刷したい場合:

String line = br.readLine();

あなたには、いくつかの理由で1を取得したいならば、あなたは、単にのようなコードを変更できます。

c = br.read()+1;

-2

あなたのコードを試しましたが、まず私の場合は「0」と表示されています。

reset実際に1の後ろにカーソルを置くと、1の前ではありません。

しかし、必要に応じて1として出力する必要があります。これはを1より前の文字に使用すると可能です。

私はrを印刷したいのように、以下に示すように、私はeにマークを置く:

while ((c = br.read()) != -1) {  
    if((char)c == 'e') { 
     br.mark(1000); 
    } 
    System.out.print((char)c); 
} 
br.reset(); 
c = br.read(); 
System.out.println((char)c); 

はそれが事が明らかに願っています。

関連する問題