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

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

Javaにはファイルの読み込みを行うFileInputStreamクラスがあります。

この記事では、

・FileInputStreamクラスとは
・FileInputStreamクラスの使い方
・FileInputStreamクラスのreadメソッド

という基本的な内容から、

・バイトストリームから文字に変換する方法
・文字エンコードをUTF-8などに指定する方法

などの応用的な使い方に関しても解説していきます。

今回はこれらの方法を覚えるために、FileInputStreamクラスのさまざまな使い方をわかりやすく解説します!

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

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

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

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー