(1) Javaでファイル読み込み&書き込みを行う方法
(1-1) 構文
(1-2) サンプルプログラム
(1) Javaでファイル読み込み&書き込みを行う方法
(1-1) 構文
(構文)
//(1)try-with-resources文でファイル読み込みとBufferedReaderインスタンスの準備 try (FileReader [FileReaderインスタンス名] = new FileReader(new File([ファイルフルパス])); BufferedReader [BufferedReaderインスタンス名] = new BufferedReader(fr)) { //(2)読み込んだ行のテキストを格納するための変数を定義 String [行の変数名]; //(3)読み取った行の内容がnullでない間は繰り返し処理 while (([行の変数名] = [BufferedReaderインスタンス名].readLine()) != null) { //(4)読み込んだ行に対して行う操作 //[何かの処理] } } catch (IOException e) { System.out.println(e); }
(構文説明)
①try-with-resources文でリソースの指定
1行目の下記箇所は「try-with-resources文」と呼ばれ、( )内で指定したリソース(FileReader、BufferedReader、InputStream、OutputStreamなど)を使う場合に、tryブロックを抜けるタイミングで自動でクローズしてくれます(リソースに対する後処理を自動で行ってくれる)。
try ([リソース])
②ファイル読み込みに必要なインスタンス生成
tryの( )内の前半部分ではFileクラスのインスタンスを作り、それを使って更にFileReaderクラスのインスタンスを生成します。
FileReader [FileReaderインスタンス名] = new FileReader(new File([ファイルフルパス]));
Fileクラスは「ファイルそのもの」や「ファイルパス」を表したクラスで、ディレクトリ生成やファイルの探索や削除など様々な用途に使います。
FileReaderクラスは「ファイルの読み込み」を行うためのクラスで、ファイルの内容を文字ストリーム(ファイルアクセスのためのクラスの総称)で読み取る事ができます。
tryの( )内の後半部分ではBufferedReaderクラスのインスタンスを生成しています。
BufferedReader [BufferedReaderインスタンス名] = new BufferedReader(fr)
BufferedReaderは文字ストリームから「バッファリング」と呼ばれる機能を使って効率的にテキストを読み込むためのクラスです。
(参考) ストリームとは?
Javaでは「ストリーム」と呼ばれる抽象概念を通じて、ファイルの読み書きを行います。ストリームは大きく分けて「文字ストリーム」(8ビット単位)と「バイトストリーム」(16ビットUnicode文字も扱える)に分かれます。
③ファイルの内容を行単位で順次読み込み
while文の中の条件に「読み込んだ行がnullでない」と指定しているので、nullの行(空行)が来るまで行を繰り返し読ませる処理になります。
while (([行の変数名] = [BufferedReaderインスタンス名].readLine()) != null) {
(1-2) サンプルプログラム
上記のプログラムにmainメソッドなども付けて、実行可能にしたものが下記サンプルになります。
(サンプルプログラム)
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class ReadFileTest { public static void main(String args[]) { final String filepath = "[ファイルパス]/[ファイル名]"; //(1)try-with-resources文でファイル読み込みとBufferedReaderインスタンスの準備 try (FileReader fr = new FileReader(new File(filepath)); BufferedReader br = new BufferedReader(fr)) { //(2)読み込んだ行のテキストを格納するための変数を定義 String word; //(3)読み取った行の内容がnullでない間は繰り返し処理 while ((word = br.readLine()) != null) { //(4)読み込んだ行に対して、内容をコンソール表示 System.out.println(word); } } catch (IOException e) { //(5)例外処理(パスが存在しないケースなど) System.out.println(e); } } }
(図121)実行結果