【Java入門】FileInputStreamでファイルを読み込む方法

こんにちは!エンジニアの中沢です。

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を使ってファイルを読み込む方法について解説しました。

文字エンコードの指定を間違えると正しく読み込めないので注意してくださいね。

もしファイルの読み込みを忘れてしまったらこの記事を確認してください!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次