- - PR -
readLineでのEOF検出について
1|2|3
次のページへ»
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-21 12:00
readLineを用いてテキストファイルの読み込みを行なっているのですが
改行だけのラインのところでnullを返してきてしまいファイルの終了まで 処理が行なえず困っています。 readLineではなく他のメソッドを用いなくてはいけないのでしょうか。 | ||||||||
|
投稿日時: 2003-11-21 12:48
BufferedInputStream(or BufferedReader)のreadLineのことですよね。
改行だけだと、空白文字列が返ってきたような気がしたんだけど違ったかな? 問題付近のソースを提示していただけないでしょうか? | ||||||||
|
投稿日時: 2003-11-21 12:48
ソースが無いのでいまいち質問内容が理解出来ていないのですが。
以下のソースではどうでしょうか?
[追記]
Unix上でWindowsの改行コードが使われているファイルを読み込むとnullが帰って来ることがあります。 [さらに追記] BufferedReaderを用いた場合でした... [ メッセージ編集済み 編集者: ぽん 編集日時 2003-11-21 13:00 ] | ||||||||
|
投稿日時: 2003-11-21 12:51
BufferedInputStream#readLine は、
改行だけのラインに対しては空文字列(長さゼロのString)、 EOFに対してはnullを返してきます。 何か勘違いをしているのでは? | ||||||||
|
投稿日時: 2003-11-21 18:43
linux上で飛んできたメールをシェルでテキストファイルに落とし
そのファイルを以下の処理をかけているのですが 改行だけのラインで終了してしまうのです。 こんな感じです。 try{ fr = new FileReader( file ); br = new BufferedReader( fr ); // 1行単位で入出力 String s; int i,j,l,m,n; while((s = br.readLine())!=null){ // 読み込んでの処理 } | ||||||||
|
投稿日時: 2003-11-22 12:27
> 改行だけのラインで終了してしまうのです。
while((s = br.readLine())!=null){ // 読み込んでの処理 } この読み込んでの処理の部分で、空文字列の処理が例外 になってる可能性はないのですか? | ||||||||
|
投稿日時: 2003-11-22 13:13
何度も手間を取らせてしまってすみません。
最初から主要部分は記入して置けばいいんですよね。 try{ fr = new FileReader( file ); br = new BufferedReader( fr ); // 1行単位で入出力 String s; int i,j,l,m,n; while((s = br.readLine())!=null){ // 読み込んでの処理 System.out.println(s); } ですので、何も処理はしていないのが実情です。 下がデータになります。 -------------------------------------------------------- Date: Thu, 20 Nov 2003 09:25:35 +0900 Mime-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit tako -------------------------------------------------------- これでシステムアウトされたものを見ると Content-Transfer-Encoding: 7bit までになってしまうのです。 | ||||||||
|
投稿日時: 2003-11-22 15:48
Windows版J2SE1.4.2のBufferReaderのソースコードを眺めると、
EOF判断は、
となっており、単純化するとこれは、読み込んだサイズが、バッファサイズ以上なら、バッファを更新し、更新後それでも読み込みサイズのほうが大きいなら、EOFであると判断するということです。途中でnullが返るということは、バッファの更新がうまくいっていないのではと思われます。そこでfill()の中身を見ると、いろいろ複雑なことを行っていますが、一番大事な部分は、
であり、委譲先で読み込めれば、バッファサイズと読み込んだサイズを更新するということです。途中でnullが返るということは読み込めていないのではと思われます。 in.read()をさかのぼると、sun.nio.cs.StreamDecoder#read()まで行き着きますが、私は、sun.nio.cs.StreamDecoderのコードを所有していないのでこれ以上のことはわかりません。 ライブラリのバグの可能性は捨てきれません。 ところで、プラットフォーム、実行VM環境、開発環境は何? | ||||||||
1|2|3
次のページへ»
