便利な書き込み用クラス

広告

ファイルへの書き込み用クラスとして、もう少し便利なPrintWriterクラスが用意されています。

PrintWriterクラスは、既にあるファイル出力用のクラスをさらに拡張する感じで利用します。その為、BufferedWriterクラスのオブジェクトを元に作成する場合が多いようです。

使い方は下記のようになります。

File file = new File(file_name);
FileWriter filewriter = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(filewriter);
PrintWriter pw = new PrintWriter(bw);

上記はまとめて下記のように記述しても構いません。

File file = new File(file_name);
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));

だんだん複雑になってきていますが、元になるファイル書き出しようのクラスを元に拡張させていって便利な形にすると考えて下さい。

このクラスを使うと何が便利かと言いますと、画面に出力する時のように"print"メソッドや"println"メソッドが用意されていることです。

この2つのメソッドは引数として色々なデータ型の値を使えるようにデータ型毎にメソッドが用意されています。その為、"write"メソッドの時のように文字列だけではなく、int型やboolean型の値もそのまま出力するように記述することが可能です。(数値でも他の値でも、その値を文字としてファイルに書き込みます)。

File file = new File(file_name);
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));

pw.println("文字列");
pw.println(10);

"print"メソッドの時は改行せずにファイルへ書き出しを行い、"println"メソッドの場合は最後に改行します。1つだけメソッドの定義を見てみます。

String を出力して、行を終了します。このメソッドは、print(String) を呼び出してから println()
を呼び出すのと同じように動作します。

パラメータ:
  x - 出力される String 値

改行は、BufferedWriterクラスで用意されていた"newLine"と同じように、動かしている環境に合わせて適切な改行文字を自動的に出力してくれます。

ファイルを閉じる

また、PrintWriterクラスを使う場合にも、使い終わったら閉じておく必要があります。PrintWriterクラスでもBufferedWriterクラスやFileWriterクラスと同じように"close"メソッドを使います。

ストリームを閉じます。

※このクラスの"close"メソッドは例外を発生させません。

サンプル

ではPrintWriterクラスを使って前のサンプルを書き直してみましょう。

streamTest7.java

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.IOException;

class streamTest7{
  public static void main(String args[]){
    try{
      File file = new File("c:\\tmp\\test.txt");

      if (checkBeforeWritefile(file)){
        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));

        pw.println("今日の最高気温は");
        pw.println(10);
        pw.println("度です");

        pw.close();
      }else{
        System.out.println("ファイルに書き込めません");
      }
    }catch(IOException e){
      System.out.println(e);
    }
  }

  private static boolean checkBeforeWritefile(File file){
    if (file.exists()){
      if (file.isFile() && file.canWrite()){
        return true;
      }
    }

    return false;
  }
}

上記をコンパイルして実際に実行してみると下記のようになります。

p11

また対象のファイルに書き込みが行われます。

p12

改行もきちんと行われていますし、数値も(文字列として)ファイルに書き込まれています。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。