プログラミングで実装することの多い頻出処理の1つとして、テキストファイルの読み込みが挙げられます。
本記事では、Java言語を使ったテキストファイルの読み込み方法について、サンプルコードを掲載しながらご紹介していきます。
目次
Javaでテキストファイルを読み込む3つの方法
Javaではテキストファイルを読み込む際、複数の方法で実現することが可能です。
よく利用される3つの方法について今回の記事で概要を確認しておきましょう。
- Files
- FileReader
- FileInputStream
テキストファイル読み込みのJavaサンプル1: Files
Java7から利用可能な「java.nio.file.Files」では「readAllLines」というメソッドが提供されており、ファイルを全行読み込む処理が簡単に実装出来るようになっています。
Filesを使ったサンプル
まずは読み込み用にテキストファイル「sample.txt」を下記内容で実行ファイルと同一フォルダに格納しておきます。
sample.txt
名前 山田太郎 年齢 30 生年月日 1990/11/27 住所 大阪府大阪市xxxxxx
実際に実行するファイルは「Main.java」として下記の内容で作成します。
package sample; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class Main { public static void main(String[] args) { try { Path path = Paths.get("sample.txt"); List lines = Files.readAllLines(path); for (String str : lines) { System.out.println(str); } } catch(IOException ioex) { ioex.printStackTrace(); } } }
コード解説
14行目が今回利用したreadAllLinesメソッドで引数に指定したパスにあるファイルを全行読み込み、List型の変数に格納します。
サンプルではファイル名だけを指定していますが、この場合Javaの実行ファイルと同一階層にテキストファイルが格納されている必要があります。
readAllLinesメソッドの引数には「Path」クラスで指定する必要があるため、13行目の記述で文字列からPathのオブジェクトを生成しています。
16~18行目の記述は、取得したテキストファイルの内容を1行ずつループさせて、コンソールに出力させる処理です。
テキストファイル読み込みのJavaサンプル2: FileReader
FileReaderでテキストファイルを読み込み、BufferedReaderと組み合わせて行単位での読み込みを行う方法も一般的です。
FileReaderを使ったサンプル
読み込むテキストはFilesクラスの説明で紹介したテキストの内容をそのまま流用して使用します。
Main.java
Main.javaの内容を書き直して、FileReaderとBufferedReaderを使ってテキストファイルを読み込んでいきます。
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) { File file = new File("sample.txt"); try (BufferedReader br = new BufferedReader(new FileReader(file))) { String str; while ((str = br.readLine()) != null) { System.out.println(str); } } catch (IOException ioex) { ioex.printStackTrace(); } } }
コード解説
今回の書き方ではJava7以前から利用出来た「java.io」のみでテキストファイルを読み込んでいきます。
9行目の処理でファイルパスを指定し、10行目の記述で「FileReader」で開いたファイルを「BufferedReader」クラスとして取得しています。
12行目に記述した「readLine」メソッドによりファイルの内容を一行ずつ読み込み、コンソールに出力しています。
FileReaderクラスだけでもテキストファイルの読み込みは可能ですが、効率的に処理するためにもBufferedReaderクラスと組み合わせて使用するのが一般的です。
テキストファイル読み込みのJavaサンプル3: FileInputStream
FileInputStreamとInputStreamReaderを使ってもテキストファイルを読み込むことが可能なので、確認しておきましょう。
FileInputStreamを使ったサンプル
同様に読み込むテキストファイルはFilesクラスの説明で利用した「sample.txt」を使用します。
Main.java
Main.javaの内容は下記のように記述してFileInputStreamでテキストファイルを読み込んでみましょう。
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; public class Main { public static void main(String[] args) { try { String str; BufferedReader bfReader = new BufferedReader(new InputStreamReader(new FileInputStream("sample.txt"), Charset.forName("UTF-8"))); while ((str = bfReader.readLine()) != null) { System.out.println(str); } bfReader.close(); } catch (IOException ioex) { ioex.printStackTrace(); } } }
コード解説
1つ前に紹介したFileReaderとほとんど同じ書き方でファイルを読み込むことが可能です。
13行目のファイル読み込みで、Fileクラスを渡すのではなく文字列としてFileInputStreamクラスにテキストのパスを渡しています。
「Charset.forName(“UTF-8”)」の記述では文字コードを指定しており、ストリーミングで読み込んだ内容をどの形式でエンコーディングするのか設定することが出来ます。
また今回はBufferedReaderクラスのreadLineメソッドで1行ずつ読み込むよう設定しましたが、InputStreamReaderクラスのreadメソッドを使用してバイト単位で読み込ませることも可能です。
さいごに: テキストファイル読み込み処理はJava開発の頻出処理
本記事では、システム開発の頻出処理であるテキストファイルの読み込み方法について、Java言語を使ったサンプルコードで解説してきました。
基本的な流れは同じなので、処理の概要さえ掴んでおけば方法が変わってもスムーズに実装することが可能です。
テキストファイルの読み込み処理はプログラマーにとって必須知識の1つなので、初心者の方もサンプルコードを参考にご自身の環境で試してみてください。
同一階層以外のテキストファイルを読み込む場合、ファイル名だけでなくパスを明示的に指定する必要があります。