JavaのFileReaderについて
このページでは、Javaのクラス FileReader
について詳しく解説します。以下のセクションにジャンプできます。
FileReaderの概要
FileReader
は、Javaの標準ライブラリに含まれるクラスで、テキストファイルを読み込むために使用されます。このクラスは Reader
を継承しており、文字ストリームを読み取るために設計されています。
主な特徴:
- テキストファイルの文字データを読み取る。
- デフォルトの文字エンコーディング(通常はUTF-16以外)を使用。
- バイナリデータの処理には不向き。
基本的な使い方
FileReader
を使う際の典型的な手順は以下の通りです。
- 読み取りたいファイルのパスを指定して
FileReader
オブジェクトを作成。 read()
メソッドでデータを読み込む。- 処理が完了したら
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の制約を回避できます。