2012/05/19

Javaでテキストをファイルに書き込む

テキストファイルに書き込むを行うとき必要になる情報は、次の3つであることが多いです。

  • ファイルパス または ファイル名
  • エンコーディング
  • 追加書き込みかどうか

あとは1行ずつ書き込むこともあれば、テキストを一気に書き込んでしまうこともあるでしょう。

今回は、テキストデータをファイルに書き込む方法をご紹介します。


Javaでテキストをファイルに書き込みを行う際には、FileWriter、OutputStreamWriterを使用して、
最終的にバッファリングできる「BufferedWriter」を構築すると効率よく書き込みを行うことができます。

FileWriterは、追加書き込みが指定できるので、既にあるファイルに追加書き込みしたいときに使うことが多いです。
OutputStreamWriterは、エンコーディングが指定できるので、UTF-8のファイルを出力したいときに使えます。

実際のコードは次の通りです。

■TextFileWriter.java

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

/**
 * {@link TextFileWriter}クラスです。
 * 
 * @author ardor
 * @version 1.0
 */
public class TextFileWriter {
 
 /**
  * 文字型出力ストリーム
  */
 private BufferedWriter writer = null;
 
 /**
  * ファイルパスを指定して、ファイル書き込みインスタンスを構築します。
  * 
  * @param filePath ファイルパス
  * @throws IOException ファイルに書き込みできない場合
  */
 public TextFileWriter(String filePath) throws IOException {
  this(filePath, false);
 }
 
 /**
  * ファイルパスを指定して、ファイル書き込みインスタンスを構築します。
  * 追加書き込みを行う場合は、append に true を指定します。
  * 
  * @param filePath ファイルパス
  * @param append true:追加書き込み、false:新規書き込み
  * @throws IOException ファイルに書き込みできない場合
  */
 public TextFileWriter(String filePath, boolean append) throws IOException {
  Writer fileWriter = new FileWriter(filePath, append);
  writer = new BufferedWriter(fileWriter);
 }
 
 /**
  * ファイルパスとエンコーディングを指定して、ファイル書き込みインスタンスを構築します。
  * 
  * @param filePath ファイルパス
  * @param encoding エンコーディング
  * @throws IOException ファイルに書き込みできない場合
  */
 public TextFileWriter(String filePath, String encoding) throws IOException {
  OutputStream out = new FileOutputStream(filePath);
  Writer outWriter = new OutputStreamWriter(out, encoding);
  writer = new BufferedWriter(outWriter);
 }
 
 /**
  * 指定したテキストをファイルに書き込みます。
  * 
  * @param text テキスト
  * @throws IOException ファイルに書き込みできない場合
  */
 public void write(String text) throws IOException {
  try {
   writer.write(text);
  }
  catch(IOException e) {
   close();
   throw e;
  }
 }
 
 /**
  * 指定したテキストを書き込んで改行します。
  * 
  * @param line テキスト
  * @throws IOException ファイルに書き込みできない場合
  */
 public void writeLine(String line) throws IOException {
  try {
   writer.write(line);
   writer.newLine();
  }
  catch(IOException e) {
   close();
   throw e;
  }
 }
 
 /**
  * 文字型出力ストリームを閉じます。
  */
 public void close() {
  try {
   writer.close();
  }
  catch(Exception e) {
   // NOP
  }
 }
}

コンストラクタをオーバーロードして好きなようにファイルを構築できるようにしてあります。

大きなテキストを書き込みたい場合、通常は任意のタイミングで flush() を呼び出すのですが、 BufferedWriterは、バッファが一杯になったタイミング、またはclose()のタイミングでflush()するので、実装は行っていません。


また主な使い方は次の通りです。

■サンプルコード

  try {
   TextFileWriter writer = new TextFileWriter("SampleUTF-8.txt", "UTF-8");
   writer.writeLine("sample line改行あり");
   writer.writeLine("日本語出力テスト");
   writer.write("sample改行なし");
   writer.close();
  }
  catch(Exception e) {
   e.printStackTrace();
  }

0 件のコメント:

コメントを投稿