サイトアイコン IT NEWS

【Java】ファイル入出力のベストプラクティスを考える

java-file-io

Javaファイル読み込み書き込みをする方法を調べていると、コーディングする人によって様々な書き方があることが分かりました。
そこで、それらをまとめて最も効率の良い書き方を考えましたので、ご紹介したいと思います。


ファイル入出力

基本的には、Fileクラスを使用すれば読み書きが可能なのですが、効率を考えて以下のクラスを使いラッピングすることにしました。

ファイル読み込みクラス

ファイル書き込みクラス

ポイント

文字コードを指定できるようにStream系のクラスを使用します。
処理速度を向上させるために、Buffered系のクラスを使用しています。
また、ファイル書き込みクラスでは、FileWriterでなく、出力文字列の整形などのテキスト出力に特化した機能があるPrintWriterを採用しました。

Javaのファイル読み込みにはたくさんの方法がありますが、どの方法が一番早いのか測定してみた。今回は全行読み込みにて測定してみました。#対象1.Files.readAllLinesJava7から導入されているjava.nio...
ファイル読み込みは何がベストなのか(Java) - Qiita - Qiita

Javaサンプルコード

public static void main(String[] args) {
    // ファイルパス
    String InputFile = args[0];
    String OutputFile = args[1];
    // 変数初期化
    BufferedReader reader = null;
    PrintWriter writer = null;
    // 処理開始
    try {
      // リーダ
      reader = new BufferedReader(
                 new InputStreamReader(
                   new FileInputStream(InputFile), "UTF-8"));
      // ライタ
      writer = new PrintWriter(
                 new BufferedWriter(
                   new OutputStreamWriter(
                     new FileOutputStream(OutputFile), "UTF-8")));
      // 読み書き開始
      String str;
      while ((str = reader.readLine()) != null) {
        writer.write(str);
        writer.newLine();
      }
    // 例外処理
    } catch (IOException e) {
      e.printStackTrace();
    // ファイルを閉じる
    } finaly {
      if (reader != null) reader.close();
      if (writer != null) writer.close();
    }
}
Java入門の基礎知識からコード確認、索引、目的別検索までWebエンジニアの為Javaコード辞典。
BufferedReader/BufferedWriterクラス | Javaコード入門 - java-code.jp

ポイント

ファイル入出力クラスについては上記の通りです。
ここでのポイントはファイルクローズする方法です。
最初にファイル入出力用の変数を用意してから処理を開始し、

BufferedReader reader = null;
PrintWriter writer = null;

tryの中ではなくfinalyでファイルを閉じます。

} finaly {
  if (reader != null) reader.close();
  if (writer != null) writer.close();
}

こうすることで、何かしらのエラーが発生して途中で処理が強制終了したとしても、必ずファイル閉じることができます。

以上、いかがでしょうか?
もっと良い方法がありましたら、コメントを頂けると嬉しいです!



モバイルバージョンを終了