- 締切済み
処理方法について
こんにちは。 独学でjavaの勉強をしているのですが、 演習問題で分からないところがあります。 ファイルへの書き込みをする問題なのですが、 public void kakikomi(){ try { FileOutputStream out=new FileOutputStream("output.txt"); PrintWriter writer=new PrintWriter(out); writer.println(seibetu); writer.println(nenrei); writer.println(taijuu); writer.println(sintyou); writer.flush(); writer.close(); }catch (FileNotFoundException e) {} } mainよりオブジェクトを作成しそれぞれの変数に(seibetu,nenrei...)値を入れファイルへ書き込みをするプログラムです。 上記のプログラムの場合性別を入れファイルを閉じる、身長を入れファイルを閉じるという作業をしているため 結果的に最後の項目である身長の値のみしかファイルに書き込み 出来ません。 どのようにすれば全ての項目をファイルに書き込むことが出来るでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- rinkun
- ベストアンサー率44% (706/1571)
簡単に修正すると > FileOutputStream out=new FileOutputStream("output.txt"); を < FileOutputStream out=new FileOutputStream("output.txt",true); とすれば宜しい。 これはファイルをオープンするときに追記モードにする設定です。 詳細はAPIマニュアルを確認ください。 追記にしないで書き込みオープンすると既存ファイルの内容は削除されますが、追記では既存ファイルの最後に追加書き込みするようになります。 ただし、この方法では繰り返し実行するとどんどんファイルに追記されていきます。 # プログラムの最初でファイルを削除しておけば良いですけど 他の修正方法としては、ファイルを毎回開かずに最初に開いて全部を書き込んでから閉じるようにします。
- _ranco_
- ベストアンサー率58% (126/214)
>上記のプログラムの場合性別を入れファイルを閉じる、身長を入れファイルを閉じるという作業をしているため 投稿されたコードでは、ファイルのclose()は最後に一回だけですね。だから、そんな問題はないと思います。なお、close()するのならその直前のflush()コールは要りません。close()はflush()も行います。
補足
質問文を間違えました。 タロー、ジローの順番でオブジェクトを作成した場合 最後のジローの性別、年齢、体重、身長はファイルに書き込みをすることは出来るのですが、 タローのそれぞれの項目がファイルに書き込むことが出来ません。 質問文どおりwriter.close();の位置が悪いと思うのですが よい解決方法はないでしょうか? よろしくお願いします。