Javaでファイルの読み込み、書き込みをする方法を調べていると、コーディングする人によって様々な書き方があることが分かりました。
そこで、それらをまとめて最も効率の良い書き方を考えましたので、ご紹介したいと思います。
目次
ファイル入出力
基本的には、Fileクラスを使用すれば読み書きが可能なのですが、効率を考えて以下のクラスを使いラッピングすることにしました。
ファイル読み込みクラス
ファイル書き込みクラス
ポイント
文字コードを指定できるようにStream系のクラスを使用します。
処理速度を向上させるために、Buffered系のクラスを使用しています。
また、ファイル書き込みクラスでは、FileWriter
でなく、出力文字列の整形などのテキスト出力に特化した機能があるPrintWriter
を採用しました。
ファイル読み込みは何がベストなのか(Java) - Qiita
Javaのファイル読み込みにはたくさんの方法がありますが、どの方法が一番早いのか測定してみた。今回は全行読み込みにて測定してみました。#対象1.Files.readAllLinesJava7...
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(); } |
こうすることで、何かしらのエラーが発生して途中で処理が強制終了したとしても、必ずファイルを閉じることができます。以上、いかがでしょうか?
もっと良い方法がありましたら、コメントを頂けると嬉しいです!
コメント