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();
}
こうすることで、何かしらのエラーが発生して途中で処理が強制終了したとしても、必ずファイルを閉じることができます。
以上、いかがでしょうか?
もっと良い方法がありましたら、コメントを頂けると嬉しいです!
- Original:https://minory.org/java-file-io.html
- Source:Minory
- Author:管理者