こんにちは!エンジニアの中沢です。
Javaにはファイルの読み込みを行うFileInputStreamクラスがあります。
この記事では、
・FileInputStreamクラスとは
・FileInputStreamクラスの使い方
・FileInputStreamクラスのreadメソッド
という基本的な内容から、
・バイトストリームから文字に変換する方法
・文字エンコードをUTF-8などに指定する方法
などの応用的な使い方に関しても解説していきます。
今回はこれらの方法を覚えるために、FileInputStreamクラスのさまざまな使い方をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
FileInputStreamクラスとは
初めにFileInputStreamクラスについて解説します。
FileInputStreamクラスはファイルを読み込み、ファイルの内容を元にした処理や、新しいファイルの作成などを行うために使います。
FileInputStreamクラスを使うと、ファイルはバイトストリームで読み込まれます。
文字ストリームで読み込みたい場合はFileReaderクラスを使用してください。
ファイルをバイトストリームで読み込む方法
ここではファイルをバイトストリームで読み込む方法を解説します。
初めにFileInputStreamクラスのコンストラクタの引数に読み込むファイルのパスを指定します。
次にInputStreamReaderクラスのコンストラクタの引数に文字エンコードを指定します。
ファイルはreadメソッドを使って、データを1バイトずつ読み込みます。
readメソッドの戻り値はint型で、データの次のバイトを返します。
ファイルの終わりに達した場合は-1を返します。
FileInputStreamクラスの使い方を覚えるために、次のプログラムで確認してみましょう!
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { // テキストファイルの内容は”abc”です。 try (FileInputStream fIStream= new FileInputStream("c:\\Test.txt")) { InputStreamReader iSReader = new InputStreamReader(fIStream, "UTF-8"); int data; while ((data = iSReader.read()) != -1) { System.out.println(data); } } catch (IOException e) { e.printStackTrace(); } } }
[実行結果]
97 98 99
このプログラムではテキストファイルをUTF-8で読み込んで、その内容を1バイトずつ表示しています。
実行結果にはテキストファイルの内容の”abc”が文字コードで表示されています。
読み込みが終わったら、closeメソッドを使用してファイルのリソースを閉じる必要があるので忘れないようにしてください。
このプログラムではcloseメソッドの代わりにJava7から追加されたtry-with-resources文でリソースを閉じています。
try-with-resources文を使うには、try文を抜けたときにcloseしたいリソースを、try文の直後の括弧の中に記述します。
バイトストリームから文字に変換する方法
テキストファイルを読み込んだ場合、そのままではバイトの数値が表示されるので、読めるように文字に変換する方法を解説します。
バイトの数値を文字に変えるには、char型にキャストするだけでOKです。
バイトストリームから文字に変換する方法を次のプログラムで確認してみましょう!
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { // テキストファイルの内容は”abc”です。 try (FileInputStream fIStream= new FileInputStream("c:\\Test.txt")) { InputStreamReader iSReader = new InputStreamReader(fIStream, "UTF-8"); int data; while ((data = iSReader.read()) != -1) { System.out.println(data); System.out.println((char) data); } } catch (IOException e) { e.printStackTrace(); } } }
[実行結果]
97 a 98 b 99 c
バイトストリームから文字に変換して、テキストファイルの内容を正しく表示できることが確認できました!
ファイルの読み込み方法について詳しく知りたい方へ
ファイルのさまざまな読み込み方法については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
いかがでしたか?
今回はFileInputStreamを使ってファイルを読み込む方法について解説しました。
文字エンコードの指定を間違えると正しく読み込めないので注意してくださいね。
もしファイルの読み込みを忘れてしまったらこの記事を確認してください!