1

txt ファイルの次の行を読み取って何かを行うメソッドがあります。EOF もチェックする必要がある別の方法があります。2 つのメソッドは、ループ内で受容的に呼び出されます。

方法 1:

trace = br.readLine();
   if (trace==null)
       break; // end of file

方法 2: 同じ手法を使用せずに EOF をチェックする必要があります。そうしないと、readLine に使用される ptr がインクリメントされます...

これを達成する方法はありますか?

ありがとう

4

3 に答える 3

2

これを達成する方法はありますか?

BufferedReader API では、これを行うことはできません (*)。本当にこれを行う必要がある場合は、これを行うためにカスタム Reader クラスを実装する必要があります。から始めてPushbackReader、メソッドを追加してから、readLine()1 つの文字を読み取ってそれをプッシュバックすることにより、eof テスト メソッドを実装します。

* Can I peek on a BufferedReader?への回答を読むことから 、ready()メソッドがEOFテストとして機能する可能性があるようです。ただし、これはready()標準コードベースの の現在の実装のアーティファクトであり、メソッドの javadoc 仕様によると、間違いなく間違っています (バグ)。

于 2012-05-06T15:25:24.583 に答える
0

使用できます

 Scanner sc = new Scanner (file);

と読んで

 while (sc.hasNext ())

スキャナーには

  sc.readLine (); 

方法。

于 2012-05-06T15:45:39.587 に答える
0

この形式を使用してチェックし、EOF 例外を回避することもできます。バッファサイズは早期に決定されるため、エラーは発生しません。

File myFile = new File("path");
String completeText = "";
FileChannel fc = new FileInputStream(myFile.getAbsoluteFile()).getChannel();
ByteBuffer buffer = ByteBuffer.allocate((int)fc.size());
fc.read(buffer);
Charset charset = Charset.defaultCharset();  
CharsetDecoder decoder = charset.newDecoder();  
CharBuffer charBuffer = decoder.decode(buffer);    
completeText = charBuffer.toString();
buffer.clear();
fc.close();
于 2012-05-08T04:38:41.210 に答える