Javaにはファイルの読み込みを行うFileInputStreamクラスがある。
・FileInputStreamクラスとは
・FileInputStreamクラスの使い方
・FileInputStreamクラスのreadメソッド
という基本的な内容から、
・バイトストリームから文字に変換する方法
・文字エンコードをUTF-8などに指定する方法
「FileInputStream」クラスとは
FileInputStreamクラスはファイルを読み込み、ファイルの内容を元にした処理や、新しいファイルの作成などを行うために使う。
FileInputStreamクラスを使うと、ファイルは「バイトストリーム」で読み込まれる。
※文字ストリームで読み込みたい場合は「FileReader」クラスを使用すること。
「ファイルをバイトストリームで読み込む」方法
初めにFileInputStreamクラスのコンストラクタの引数に読み込む「ファイルのパス」を指定。
次にInputStreamReaderクラスのコンストラクタの引数に「文字エンコードを指定」。
※文字エンコードの指定を間違えると正しく読み込めないので注意。
ファイルは「readメソッド」を使って、データを1バイトずつ読み込む。
readメソッドの戻り値はint型で、データの次のバイトを返す。
ファイルの終わりに達した場合は-1を返す。
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
参考サイト