主なクラス
ストリーム(データの入出力)を扱うjava.io
パッケージには以下の基底クラスがある。
- 文字ストリームを扱うクラス
-
java.io.Reader
クラス -
java.io.Writer
クラス
-
- バイトストリームを扱うクラス
-
java.io.InputStream
クラス -
java.io.OutputStream
クラス
-
java.io.Reader
クラス
テキストファイルや文字データを読み取るための共通のメソッドを提供する。
このクラスは抽象クラスであるため、具象サブクラス(例えばFileReader
やBufferedReader
など)を使用してファイルから文字データを読み取る。
主なメソッド
-
int read()
:
次の文字を読み込んでint
型で返す。
ファイルの終端に達した場合は-1
を返す。 -
int read(char[] cbuf)
:
指定した文字配列にデータを読み込み、読み込んだ文字数を返す。
ファイルの終端に達した場合は-1
を返す。 -
int read(char[] cbuf, int off, int len)
:
指定した範囲内の文字を読み込み、読み込んだ文字数を返す。
ファイルの終端に達した場合は-1
を返す。 -
void close()
:
Reader
オブジェクトを閉じてリソースを解放する。
java.io.Writer
クラス
テキストファイルや文字データを書き込むための共通のメソッドを提供する。このクラスも抽象クラスであるため、具象サブクラス(例えばFileWriter
やBufferedWriter
など)を使用してファイルに文字データを書き込む。
主なメソッド
-
void write(int c)
:
指定した文字を書き込む。 -
void write(char[] cbuf)
:
指定した文字配列のデータを書き込む。 -
void write(char[] cbuf, int off, int len)
:
指定した範囲内の文字を書き込む。 -
void write(String str)
:
指定した文字列を書き込む。 -
void write(String str, int off, int len)
:
指定した範囲内の文字列を書き込む。 -
void flush()
:
バッファされたデータを強制的にファイルに書き込み同期させる。 -
void close()
:
Writer
オブジェクトを閉じてリソースを解放する。
java.io.InputStream
クラス
バイトデータを読み取るための共通のメソッドを提供する。このクラスも抽象クラスであるため、具象サブクラス(例えばFileInputStream
やBufferedInputStream
、ObjectInputStream
など)を使用してファイルや他のソースからバイトデータを読み込む。
主なメソッド
-
int read()
:
次のバイトデータを読み込んでint
型で返す。
ファイルの終端に達した場合は-1
を返す。 -
int read(byte[] b)
:
指定したバイト配列にデータを読み込み、読み込んだバイト数を返す。
ファイルの終端に達した場合は-1
を返す。 -
int read(byte[] b, int off, int len)
:
指定した範囲内のバイトデータを読み込み、読み込んだバイト数を返す。
ファイルの終端に達した場合は-1
を返す。 -
void close()
:
InputStream
オブジェクトを閉じてリソースを解放する。
java.io.OutputStream
クラス
バイトデータを書き込むための共通のメソッドを提供する。このクラスも抽象クラスであるため、具象サブクラス(例えばFileOutputStream
やBufferedOutputStream
、ObjectOutputStream
など)を使用してファイルや他のソースにバイトデータを書き込む。
主なメソッド
-
void write(int b)
:
指定したバイトデータを書き込む。 -
void write(byte[] b)
:
指定したバイト配列のデータを書き込む。 -
void write(byte[] b, int off, int len)
:
指定した範囲内のバイトデータを書き込む。 -
void flush()
:
バッファされたデータを強制的に実際のデータを目的のソース(ファイルなど)に書き込み同期させる。 -
void close()
:
OutputStream
オブジェクトを閉じてリソースを解放する。
ファイルの読み取りが終了したら、以下のいずれかの方法を使用してリソースを解放することを忘れないようにする。
-
finally
ブロックでclose
メソッドを呼び出す。 -
try-with-resources
文を使用する。
例(try-with-resources
文を使用)
例として、sample.txt
という名前のテキストファイルに次の内容があるとする。
Hello, this is a sample text file.
It contains some text for FileReader example.
以下はFileReader
クラスを使用してこのファイルを読み込む。
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
String filePath = "sample.txt";
try (FileReader fileReader = new FileReader(filePath)) {
int character;
while ((character = fileReader.read()) != -1) {
System.out.print((char) character);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
この例では、FileReader
クラスを使用してsample.txt
ファイルを開き、1文字ずつ読み込んでコンソールに出力している。
FileReader
はReader
クラスの抽象メソッドであるread()
を実装している。
read()
メソッドはファイルから1文字ずつデータを読み込み、ファイルの終端に達すると-1
を返す。
また、try-with-resources
文を使用すれば、自動的にファイルを閉じることができる。
Java 7以降では以下の理由のためtry-with-resources
文の使用が推奨されている。
-
finally
ブロックでストリームを明示的に閉じなくても自動的にリソースを解放することができる。 - コードが短くなり可読性が向上する。