Javaでファイルの書き込みを行う:BufferedWriter

Java でファイルの書き込みを行う場合には、BufferedWriter を使用します。ここでは、BufferedWriter を用いたファイルの書き込み方法について説明します。

BufferedWriter の使い方

BufferedWriter を使用してファイルの書き込みを行うときは、以下のように記述します。

File f = new File("ファイル名");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));

BufferedWriter の引数には FileWriter のオブジェクトを指定する必要があります。また、これらのクラスを使用するときは、必要なクラスをインポートしてください。

ファイルに書き込む

ファイルに文字列を書き込むときは、BufferedWriter クラスの write() メソッドを使用します。

BufferedWriterオブジェクト.write(書き込む文字列)

以下は、ファイルに文字列を書き込む例です。

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

class Sample {
  public static void main(String args[]) {

    try {
      File f = new File("sample.txt");
      BufferedWriter bw = new BufferedWriter(new FileWriter(f));

      bw.write("1行目");
      bw.newLine();
      bw.write("2行目");
      bw.newLine();
      bw.write("3行目");
      bw.newLine();

      bw.close();
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

上のプログラムを実行し、sample.txt を確認すると以下のような結果になります。

1行目
2行目
3行目

まず、BufferedWriter でファイルを開きます。そして、write() を用いて文字列をファイルに書き込んでいます。write() で改行は追加されないので、newLine() を使って各行に改行を追加しています。

BufferedWriter を使用するときは、必ず例外の捕捉または宣言をする必要があります。そのため、上の例では try catch の構文を使用して IOException で例外を捕捉しています。

最後に close() を使用してファイルを解放しています。メモリリークの原因となる可能性があるので、ファイルの書き込みが終了したら必ず close() を呼び出すようにしてください。

ファイルに追記する

先ほどの例では、ファイルの中身が一度削除され上書きされてしまいます。もし追記を行いたい場合は、FileWriter の第2引数に true を指定します。

以下はファイルに文字列を追記する例です。

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

class Sample {
  public static void main(String args[]) {

    try {
      File f = new File("sample.txt");
      BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));

      bw.write("4行目");
      bw.newLine();

      bw.close();
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

上のプログラムを実行し、sample.txt を確認すると以下のような結果になります。

1行目
2行目
3行目
4行目

上のプログラムでは、FileWriter の第2引数に true を指定し追記を行うようにしています。

文字コードを指定して書き込む

環境によっては、書き込んだファイルを読み込むと文字化けが発生してしまう場合があります。

FileWriter クラスは文字コードを指定することができないので、文字コードを指定するときは、OutputStreamWriter と FileOutputStream を使用します。OutputStreamWriter のオブジェクトを生成するときに、第2引数に文字コードを指定します。

以下は UTF-8 を指定してファイルに書き込む例です。

import java.io.File;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import java.io.BufferedWriter;
import java.io.IOException;

class Sample {
  public static void main(String args[]) {

    try {
      File f = new File("sample.txt");
      OutputStreamWriter osw  = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");
      BufferedWriter bw = new BufferedWriter(osw);

      bw.write("1行目");
      bw.newLine();

      bw.close();
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

イベント