LoginSignup
0
0

【JavaGold】ストリームの基底クラス

Last updated at Posted at 2023-07-20

主なクラス

ストリーム(データの入出力)を扱うjava.ioパッケージには以下の基底クラスがある。

  • 文字ストリームを扱うクラス
    • java.io.Readerクラス
    • java.io.Writerクラス
  • バイトストリームを扱うクラス
    • java.io.InputStreamクラス
    • java.io.OutputStreamクラス

java.io.Readerクラス

テキストファイルや文字データを読み取るための共通のメソッドを提供する。
このクラスは抽象クラスであるため、具象サブクラス(例えばFileReaderBufferedReaderなど)を使用してファイルから文字データを読み取る。

主なメソッド
  • int read()
    次の文字を読み込んでint型で返す。
    ファイルの終端に達した場合は-1を返す。
  • int read(char[] cbuf)
    指定した文字配列にデータを読み込み、読み込んだ文字数を返す。
    ファイルの終端に達した場合は-1を返す。
  • int read(char[] cbuf, int off, int len)
    指定した範囲内の文字を読み込み、読み込んだ文字数を返す。
    ファイルの終端に達した場合は-1を返す。
  • void close()
    Readerオブジェクトを閉じてリソースを解放する。

java.io.Writerクラス

テキストファイルや文字データを書き込むための共通のメソッドを提供する。このクラスも抽象クラスであるため、具象サブクラス(例えばFileWriterBufferedWriterなど)を使用してファイルに文字データを書き込む。

主なメソッド
  • 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クラス

バイトデータを読み取るための共通のメソッドを提供する。このクラスも抽象クラスであるため、具象サブクラス(例えばFileInputStreamBufferedInputStreamObjectInputStreamなど)を使用してファイルや他のソースからバイトデータを読み込む。

主なメソッド
  • int read()
    次のバイトデータを読み込んでint型で返す。
    ファイルの終端に達した場合は-1を返す。
  • int read(byte[] b)
    指定したバイト配列にデータを読み込み、読み込んだバイト数を返す。
    ファイルの終端に達した場合は-1を返す。
  • int read(byte[] b, int off, int len)
    指定した範囲内のバイトデータを読み込み、読み込んだバイト数を返す。
    ファイルの終端に達した場合は-1を返す。
  • void close()
    InputStreamオブジェクトを閉じてリソースを解放する。

java.io.OutputStreamクラス

バイトデータを書き込むための共通のメソッドを提供する。このクラスも抽象クラスであるため、具象サブクラス(例えばFileOutputStreamBufferedOutputStreamObjectOutputStreamなど)を使用してファイルや他のソースにバイトデータを書き込む。

主なメソッド
  • 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文字ずつ読み込んでコンソールに出力している。

FileReaderReaderクラスの抽象メソッドであるread()を実装している。
read()メソッドはファイルから1文字ずつデータを読み込み、ファイルの終端に達すると-1を返す。

また、try-with-resources文を使用すれば、自動的にファイルを閉じることができる。

Java 7以降では以下の理由のためtry-with-resources文の使用が推奨されている。

  • finallyブロックでストリームを明示的に閉じなくても自動的にリソースを解放することができる。
  • コードが短くなり可読性が向上する。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0