JavaのFileReaderについて

JavaのFileReaderについて

このページでは、Javaのクラス FileReader について詳しく解説します。以下のセクションにジャンプできます。

FileReaderの概要

FileReader は、Javaの標準ライブラリに含まれるクラスで、テキストファイルを読み込むために使用されます。このクラスは Reader を継承しており、文字ストリームを読み取るために設計されています。

主な特徴:

  • テキストファイルの文字データを読み取る。
  • デフォルトの文字エンコーディング(通常はUTF-16以外)を使用。
  • バイナリデータの処理には不向き。

基本的な使い方

FileReader を使う際の典型的な手順は以下の通りです。

  1. 読み取りたいファイルのパスを指定して FileReader オブジェクトを作成。
  2. read() メソッドでデータを読み込む。
  3. 処理が完了したら close() メソッドでリソースを解放。

以下は基本的な例です。


import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("example.txt")) {
            int character;
            while ((character = reader.read()) != -1) {
                System.out.print((char) character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

1行ずつ読み取る例

FileReader を直接使うと、行単位での読み取りはサポートされていません。しかし、BufferedReader と組み合わせることで、行単位で読み取ることが可能です。


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

public class ReadByLineExample {
    public static void main(String[] args) {
        try (BufferedReader bufferedReader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

文字単位で読み取る例

read(char[] cbuf) メソッドを使用することで、一度に複数の文字をバッファに読み込むことができます。


import java.io.FileReader;
import java.io.IOException;

public class ReadCharactersExample {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("example.txt")) {
            char[] buffer = new char[1024];
            int numCharsRead;
            while ((numCharsRead = reader.read(buffer)) != -1) {
                System.out.print(new String(buffer, 0, numCharsRead));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

例外処理の注意点

FileReader を使用する際には、以下の例外に注意する必要があります。

  • FileNotFoundException: 指定したファイルが存在しない場合にスローされます。
  • IOException: 入出力エラーが発生した場合にスローされます。

Java 7以降では、try-with-resources を使用することで、リソースの明示的な解放を簡略化できます。

FileReaderの制限事項

FileReaderにはいくつかの制限があります。

  • エンコーディングを指定することができません。UTF-8以外のエンコーディングを使用する場合は InputStreamReader を使用する必要があります。
  • バイナリファイルの読み取りには不適切です。

FileReaderの代替案

FileReaderの制約を克服するために、以下の代替手段を検討できます。

  • InputStreamReader: エンコーディングを指定して文字ストリームを読み取ることができます。
  • Filesクラス: java.nio.file.Files を使用すると、簡単にファイル全体を文字列として読み込むことができます。
  • Scanner: テキストファイルをトークン(単語、数字など)単位で処理できます。

例: Files.readAllLines() を使用した簡易ファイル読み取り


import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.List;

public class FilesExample {
    public static void main(String[] args) {
        try {
            List<String> lines = Files.readAllLines(Paths.get("example.txt"));
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

上記の方法を使用することで、FileReaderの制約を回避できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です