【初心者】Java質問・相談スレッド103【大歓迎】at TECH【初心者】Java質問・相談スレッド103【大歓迎】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト712:デフォルトの名無しさん 07/07/17 23:13:36 ファイル出力時のflush()についての質問です。 少し前に下記のようなコードを書いてプログラムを走らせたところ、出力ファイルの末尾が切れていました。 String output_file_str = "hoge.txt"; FileWriter output_file = new FileWriter(output_file_str); BufferedWriter output_file_buf = new BufferedWriter(output_file); /* 出力処理 */ output_file_buf.close(); output_file.close(); 調べた結果、close()する前にflush()をしなければいけないということが分かったので、下記のように直して現状は正しく動作しています。 String output_file_str = "hoge.txt"; FileWriter output_file = new FileWriter(output_file_str); BufferedWriter output_file_buf = new BufferedWriter(output_file); /* 出力処理 */ output_file_buf.flush(); output_file_buf.close(); output_file.close(); 713:712 07/07/17 23:14:20 続きです ここで、ふと疑問に思ったのが、FileWriterとBufferedWriterの両方にflushが存在している点で、 FileWriterは一文字単位でしかやり取りできない、BufferedWriterを使うことで行単位などでもやり取りができるということから 【BufferedWriter】-【FileWriter】-【ファイル】 とつながっていると思うのですが、この場合 output_file_buf.flush(); /* BufferedWriterの内容をすべてFileWriterにflush()する */ output_file_buf.close(); /* BufferedWriterの中身はすべて出力済みなので閉じてOK */ output_file.flush(); /* FileWriterの内容をすべて指定したファイルにflush()する */ output_file.close(); /* FileWriterの中身はすべて出力済みなので閉じてOK */ と両方でflushすべきなのかどうかで迷っています。 いくつかのページを参考に調べてみると、 String output_file_str = "hoge.txt"; BufferedWriter output_file_buf = new BufferedWriter(new FileWriter(output_file_str)); /* 出力処理 */ output_file_buf.flush(); output_file_buf.close(); といった感じにひとつずつ変数を定義するのではなくまとめて書かれていたのですが、FileWriterを明示的にflushしなくても安全なのでしょうか? 以上です。どなたかアドバイスよろしくお願いします。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch