まとめてファイルに書き込む

広告

FileReaderクラスにBufferedReaderクラスを組み合わせて利用したように、FileWriterクラスの場合も効率良く書き込むためのBufferedWriterクラスが用意されています。

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

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

FileWriterクラスのオブジェクトを作成するところまでは今までと同じですが、このオブジェクトを引数としてBufferedWriterクラスのオブジェクトを作成します。そしてFileWriterクラスのオブジェクトではなく、BufferedWriterクラスのオブジェクトに対して書き込み用のメソッドを実行してテキストファイルにテキストを書き出します。

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

File file = new File(file_name);
BufferedWriter bw = new BufferedWriter(new FileWriter(file));

自動で判別された改行文字の出力

BufferedWriterクラスのオブジェクトを使って書き込みを行う場合も"write"メソッドを使う点は同じです。ただ、改行文字を出力するためのメソッドが別に用意されています。

前のサンプルでは改行文字として「\r\n」を書き出していました。Windowsの場合はそれでいいですけど、OSによって改行文字が「\n」だけのものもあります。その為、前のサンプルをWindows以外の環境で利用すると思ったとおりの動作をしない場合があります。

BufferedWriterクラスで用意されている"newLine"メソッドは、プログラムを実行しているOSなどの環境に合わせ、その環境に適した改行コードを自動で判断して出力してくれます。(実際には、プログラムのソースコードはどのOSでも同じものを使えますが、コンパイルする時にはOS毎のコンパイラがありますので、コンパイルする時点でOSに合った改行文字を出力するように調整しているのだと思います)。

public void newLine() throws IOException

改行文字を書き込みます。改行文字は、システムの line.separator プロパティにより定義され、必
ずしも単一の改行文字 (「\n」) であるとは限りません。

例外:
  IOException - 入出力エラーが発生した場合

"newLine"メソッドを実行すると、ファイルに改行文字が書き込まれます。使い方としては下記のような感じです。

File file = new File(file_name);
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write("こんにちは");
bw.newLine();

ファイルを閉じる

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

public void close() throws IOException

ストリームを閉じます。

例外:
  IOException - 入出力エラーが発生した場合

BufferedWriterクラスのオブジェクトに対して"close"処理を行えば、その元になっているFileWriterクラスの方は"close"しなくても構いません。

サンプル

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

streamTest6.java

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

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

      if (checkBeforeWritefile(file)){
        BufferedWriter bw = new BufferedWriter(new FileWriter(file));

        bw.write("こんにちは");
        bw.newLine();
        bw.write("お元気ですか?");
        bw.newLine();

        bw.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;
  }
}

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

p9

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

p10

改行もきちんと行われています。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。