Javaでファイルの読み込み、書き込みをする方法を調べていると、コーディングする人によって様々な書き方があることが分かりました。
そこで、それらをまとめて最も効率の良い書き方を考えましたので、ご紹介したいと思います。
目次
ファイル入出力
基本的には、Fileクラスを使用すれば読み書きが可能なのですが、効率を考えて以下のクラスを使いラッピングすることにしました。
ファイル読み込みクラス
ファイル書き込みクラス
ポイント
文字コードを指定できるようにStream系のクラスを使用します。
処理速度を向上させるために、Buffered系のクラスを使用しています。
また、ファイル書き込みクラスでは、FileWriterでなく、出力文字列の整形などのテキスト出力に特化した機能があるPrintWriterを採用しました。
Qiita


ファイル読み込みは何がベストなのか(Java) - Qiita
Javaのファイル読み込みにはたくさんの方法がありますが、どの方法が一番早いのか測定してみた。 今回は全行読み込みにて測定してみました。 対象 1.Files.readAllLines Ja...	
Javaサンプルコード
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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();     } } | 
ポイント
ファイル入出力クラスについては上記の通りです。
ここでのポイントはファイルをクローズする方法です。
最初にファイル入出力用の変数を用意してから処理を開始し、
| 1 2 | BufferedReader reader = null; PrintWriter writer = null; | 
tryの中ではなくfinalyでファイルを閉じます。
| 1 2 3 4 | } finaly {   if (reader != null) reader.close();   if (writer != null) writer.close(); } | 
こうすることで、何かしらのエラーが発生して途中で処理が強制終了したとしても、必ずファイルを閉じることができます。以上、いかがでしょうか?
もっと良い方法がありましたら、コメントを頂けると嬉しいです!


コメント