Javaでプログラムを作成する際、外部のファイルを読み込んで何かしらの処理を行いたい機会はよくあります。
本記事では、Javaでのファイル読み込みについて、3つの方法をサンプルコードを掲載しながらご紹介していきます。
目次
JavaのFilesクラスでファイルを読み込む
Javaでは、古くからjava.ioパッケージのFileクラスがファイル操作に利用されるクラスとして一般的でしたが、Java1.7より高度なファイル操作が行える「Files」クラスが提供されるようになりました。
Java11以降では、FilesクラスのreadStringメソッドを使用することで、簡単にファイルを読み込んでStringクラスへ代入することが可能です。
サンプル
サンプルでは「Main.java」からプロジェクトルートに配置した「test.txt」ファイルの中身を読み込み、コンソールに出力します。
Main.java
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path path = Paths.get("test.txt"); try { String content = Files.readString(path); System.out.println(content); } catch(IOException ex) { ex.printStackTrace(); } } }
test.txt
あいうえお かきくけこ さしすせそ
このサンプルを実行すると、test.txtの内容がコンソールへ出力されます。
解説
readStringメソッドの使い方は非常にシンプルで、Pathクラスに設定したファイルをメソッドの引数として設定することで、String型としてファイルの中身を取得することが可能です。
サンプルの場合、10行目がPathクラスへプロジェクトルートに配置した「test.txt」ファイルを読み込ませる処理で、13行目でreadStringメソッドによりファイル内容を読み込み14行目のコンソール出力処理へ繋げています。
JavaのFileReaderクラスでファイルを読み込む
Javaでファイルを読むこむ際、よく利用される方法の2つ目はFileReaderクラスを利用する方法です。
FileReaderクラスだけでも読み込むことは出来ますが、BufferedReaderクラスと併用する方法が一般的です。
サンプル
Filesクラスで掲載したサンプルをFileReaderクラスを利用した処理に書き換えたのが下記のサンプルです。
今回のサンプルではBufferedReaderクラスと組み合わせて1行ずつ読み込みを行っています。
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) { try { File file = new File("test.txt"); if (file.exists()) { FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String content; while ((content = br.readLine()) != null) { System.out.println(content); } br.close(); } } catch (IOException ex) { ex.printStackTrace(); } } }
Filesクラスでファイルを読み込んだ際と同様に、プロジェクトルートに「test.txt」を配置しておくと、ファイル内容がコンソールに出力されます。
解説
FileReaderクラスで読み込む際、引数としてFileクラスのオブジェクトを指定する必要があるため、11行目でFileクラスでテキストファイルのパスを指定しています。
14・15行目ではFileReaderクラスのオブジェクトを作成した後、BufferedReaderクラスのオブジェクトに変換しています。
17行目から19行目のループ処理が、ファイルの行が空になるまでコンソールに出力する処理です。
ファイルが存在しなかった場合エラーとなるため、13行目のようにファイルの存在チェックが必要となります。
JavaのFileInputStreamクラスでファイルを読み込む
FileInputStreamでは、バイトデータを読み込むことが可能で、テキストファイルを読み込むことも可能です。
FileInputStreamを使うことで、読み込む際の文字コードを指定することも出来るので試してみましょう。
サンプル
サンプルでは、上記サンプルでも使っていた「test.txt」ファイルを「SJIS」形式で読み込んでみます。
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("test.txt"); BufferedReader bf = new BufferedReader(new InputStreamReader(fis, "SJIS")); String content; while((content = bf.readLine()) != null) { System.out.println(content); } bf.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
サンプルコードを実行すると、コンソールウィンドウにSJIS変換した影響で、文字化けした状態で出力されます。
解説
11行目のFileInputStreamでまず読み込みたいファイルパスを指定します。
12行目では、今回InputStreamReaderを利用してSJIS指定したファイルの内容を、そのままBufferedReaderクラスのオブジェクトとして変換しています。
これにより14行目のループ処理でreadLineメソッドを利用して、1行ずつファイルから取得した内容をコンソールへと出力出来る仕組みです。
さいごに: Javaでファイル読み込み処理は簡単に実装出来る
本記事では、Javaでのファイル読み込みに関して、3つのクラスを利用した方法をサンプルコードを掲載しながらご紹介してきました。
どのクラスを利用する場合でも基本的な流れは同じです。
ファイル読み込みの処理全体の流れをしっかりと把握し、それぞれのクラスを利用出来るように試してみてください。
FileReaderでは、readメソッドでファイル内容を1文字ずつ読み込む方法が提供されていますが、BufferedReaderクラスのreadLineメソッドを利用することで1行ずつ読み込むことが可能となります。