OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:625
区分:プログラム  |  分類:Java  |  最終更新日:2014/11/20
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【Java】テキストファイルを読み込む
関連タグ:Java, String, FileReader, BufferedReader
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 11,796
Java関連技術まとめ > 【Java】テキストファイルを読み込む

Java でテキストファイルに読み込む方法は、いくつかあります。

 

FileReaderクラスで読み込む

【JDK1.1以降】

テキストファイル読み込みの基本クラスとなるのが FileReader クラスです。

 

■コンストラクタ

コンストラクタ説明
FileReader(String fileName)

ファイルパス(fileName)からFileReaderオブジェクトを作成します。

FileReader(File file)

FileオブジェクトからFileWriterオブジェクトを作成します。

 

■FileReader主要メソッド

メソッド戻り値説明
read()

int

ストリームから文字を一文字づつ読み込みます。

読み込んだ値は文字コードを表す整数(int型)で返します。

ストリームの終わりに達した場合は -1 を返します。

close()

void

ストリームを閉じて、それに関連するすべてのシステムリソースを解放します。

※コンストラクタやメソッドの詳細は公式の API リファレンスを確認ください。

 

FileReader クラスでファイルを読み込む場合は、まず、引数に File オブジェクトまたはファイルパス(文字列)を指定して FileReader オブジェクトを生成します。

 

File file = new File("c:\\tmp\\sample.txt");     // Fileオブジェクトの生成
FileReader fr = new FileReader(file);            // FileReaderオブジェクトの生成

 

ファイルの読み込みは、その生成したオブジェクトの read メソッドを使用して行います。read メソッドは一文字づつ読み込むため、通常はループ処理でファイルの終わりまで読み込みます。また、このメソッドは読み込んだ値を文字コード(int型)で返すため、文字として使用する場合は値を文字型にキャストする必要があります。

 

int ch;
while((ch = fr.read()) != -1){                   // ループ読み込み
    System.out.print((char)ch);                  // 文字型にキャストして表示
}

 

ループ処理でファイルを読み込む際、read メソッドはストリームの終わりまで来ると「-1」を返すため、その特性を利用してループを抜けます。なお、FileReader オブジェクトを生成する際に、該当のファイルが存在しなかったり、アクセスできなかったりした場合は、FileNotFoundException が発生します。また、読み込みの際に読み込みに失敗した場合などは IOException が発生するため、それぞれの例外に対しての例外処理を行う必要があります。

 

【サンプルコード1】

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

class Sample1 {
    public static void main(String[] args) {

        try{
            //出力先ファイルのFileオブジェクトを作成
            File file = new File("c:\\tmp\\sample.txt");

            //FileReaderオブジェクトを作成
            FileReader fr = new FileReader(file);

            //ファイルの読み込み
            int ch;
            while((ch = fr.read()) != -1){
                System.out.print((char)ch);
            }

            //FileReaderオブジェクトをクローズ
            fr.close();

        } catch(FileNotFoundException e) {
            System.out.println(e);
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}

※上記例はファイル「c:\tmp\sample.txt」を読み込み、標準出力に表示しています。

 

■特記事項

  • 一般的に、FileReader や InputStreamReader などの Reader から直接 read メソッドを呼び出した場合、その要求は直ちにストリームに対して発行されるため、アクセスの面では非常に効率が悪く、通常は BufferedReader クラスなどを使用してバッファリングすることが推奨されています。
  • FileReader には文字コードを指定して読み込む機能はありません。

BufferedReaderクラスで書き込む

【JDK1.1以降】

読み込む文字をバッファリングすることによって、入力ストリームから効率良くテキストを読み込むクラスです。

 

■コンストラクタ

クラス説明
BufferedReader(Reader in)

Readerオブジェクトから文字型入力ストリームを作成します。

 

■BufferedReader主要メソッド

メソッド戻り値説明
readLine()

String

テキストを一行読み込みます。

ストリームが終わりの場合はnullを返します。

一行の終わりは、改行「\n」か、復帰「\r」、または復行とそれに続く改行のいずれかで認識されます。

close()

void

ストリームを閉じて、それに関連するすべてのシステムリソースを解放します。

※コンストラクタやメソッドの詳細は公式の API リファレンスを確認ください。

 

通常、Reader(FileReader や InputStreamReader など)は呼び出しがあった場合、ただちにストリームに対してその要求を発行しますが、一般的にファイルなどのストリームアクセスは低速なため、Reader から直接、読み込みメソッドを呼び出す方法は非効率的と言われています。そこで使用されるのが BufferedReader になります。このクラスは読み込む文字をバッファリングすることにより、入力ストリームから効率良くテキストを読み込むことができます。

 

【サンプルコード2】

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

class Sample2 {
    public static void main(String[] args) {

        try{
            //出力先ファイルのFileオブジェクトを作成
            File file = new File("c:\\tmp\\sample2.txt");

            //BufferedReaderオブジェクトを作成
            BufferedReader br = new BufferedReader(new FileReader(file));

            //ファイルの読み込み
            String str = null;
            while ((str = br.readLine()) != null) {
                System.out.println(str);
            }

            //FileWriterオブジェクトをクローズ
            br.close();

        } catch(FileNotFoundException e) {
            System.out.println(e);
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}

※上記例はファイル「c:\tmp\sample2.txt」を一行ごと読み込み、標準出力に表示しています。

 

関連記事
関連記事はありません。
外部リンク
外部リンクはありません。
- 記事検索 -