スライドショー

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

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

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

中沢 丈

中沢 丈

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

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説