ファイル出力クラスの選択について(Java)
少し長文になります。
Javaで、複数のオブジェクトに格納された文字列をループでgetして、
1つのファイル(test.txt)内に出力していくプログラムを作っています。
ファイル出力する際に使用可能なクラスがいくつもあるため、
どれを選択すればいいのか迷ってます。
以下の条件から、使用すべきクラスを教えて下さい!
<ファイル出力の条件>
ーーーーーーーーーーーーーー
1. ファイル(test.txt)は毎回新規で1ファイルのみ作成して、
そのファイル内にオブジェクトからループでgetした文字列を1行ずつ出力していく。
(次回実行の直前に、前回のtest.txtは手動削除する。)
2. test.txt内には日本語が出力される可能性があり、且つ、
test.txtをWindowsのアプリケーションで利用するため、
SJISにエンコードして出力する。
※Javaの実行環境はLinux
3. バッファを使って出力する。
ーーーーーーーーーーーーーー
以上です。
私の考えでは、全てキャラクタストリームを使って、
----------
FIleWriter fw = new FileWriter("test.txt",true);
OutputStreamWriter osw = new OutputStreamWriter(fw,"SJIS");
BufferedWriter bw = new BufferedWriter(osw);
----------
でいいのかなと思ったのですが、
ネットを見ていると
----------
FileOutputStream os = new FileOutputStream("output");
OutputStreamWriter osw = new OutputStreamWriter(os, "JIS");
BufferedWriter bw = new BufferedWriter(osw);
PrintWriter pw = new PrintWriter(bw);
----------
という記述もあり、
わざわざキャラクタストリームとバイトストリーム(FileOutputStream)を混ぜて使っている意図もよく分かりません。
(文字列を扱うのに、バイトストリームを使う意味って無いですよね??)
それから、私の例では
FIleWriterインスタンス生成時の引数で"true"を指定して
test.txtに"追記"するように設定してますが、
test.txt自体は毎回新規作成のものを使うので、この場合trueもfalseも不要でしょうか??
(→認識の確認として、
「trueやfalseはあくまで既存ファイルに対しての追記/上書きの設定であって、
ファイルをオープンしてクローズするまでの間はtrueなど設定しなくても
ずっと末尾に追記されていく」という認識でOK?)
また、true/falseが不要な場合、
FIleWriterは使わずに、
----------
OutputStreamWriter osw = new OutputStreamWriter("test.txt","SJIS");
BufferedWriter bw = new BufferedWriter(osw);
----------
としても問題無いでしょうか??
以上、分かる方、アドバイスください!
お礼
ご回答ありがとうございます。 自分自身、IOに関して実際にあまり触ったことがないので、 勉強しながら試行錯誤しているところです。 ご回答の件、もう少し自分で理解が深まったら、 実際に試させていただこうと思っております。 ありがとうございました。