- - PR -
ファイル書き込みの謎
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-01-21 09:50
今、Streamを勉強しています。
その際に次のような現象を発見しました。 どなたかこの現象を説明できませんでしょうか。 ========================== 読込ファイルin.txt 書込ファイルout.txtの場合、 正常にin.txtからout.txtに内容がコピーされる しかし、 読込ファイルin.txt 書込ファイルin.txtの場合、 in.txtが0バイトになる。
ちなみに、in.txtには「あいうえお」と書かれているだけです。 ========================== 同じファイルのinとoutのStreamを生成し for文で読み込んだファイルの内容をoutのバッファに書き込んで 最後にflushしているのだから 正常に書き込まれるのではないか と思ったのですが、何故かなりません。 何故in.txtが正常に書き込まれないのか判りませんでしょうか。 なお、実行環境はJDK1.4.2_08、JDK1.5.0_13、JDK1.6.0_3で確認しました。 | ||||
|
投稿日時: 2008-01-21 10:13
outをflushする前に、inをcloseしたら、どうなります?
| ||||
|
投稿日時: 2008-01-21 11:50
お返事ありがとうございます。
私も、inストリームを開いている状態で Flushしたせいかと思い試してみましたが、 結果は変わりませんでした。 ちなみにReader→Writerでやっても同じ結果が出ますし バッファリングしなくても同じ結果が出ます。 Streamの内部で何かやっているのかと思ってますが 謎です。 | ||||
|
投稿日時: 2008-01-21 12:45
FileOutputStreamでnewした時点でファイルが0バイトで作成されます。
そのためだと思いますが readし終わった後にnewするとどうなりますか? | ||||
|
投稿日時: 2008-01-21 14:17
![]() まさにこれが理由のようでした。 読み込んでからFileOutputStreamを生成すると 0バイトになりませんでした。 今までflushした時点で作成されるものと誤解していました。 とても大切なことを知りました。 大感謝です。 | ||||
|
投稿日時: 2008-01-21 23:25
解決したようでよかったですが・・
ストリームをTry句内部で閉じない場合は null チェックをしましょう。 ストリーム作成時に IOException が発生した場合、NullPointerExceptionが発生します。 |
1