広告

Java : Closeable - API使用例

Closeable (Java SE 21 & JDK 21) の使い方まとめです。
だいたいのメソッドを網羅済みです。
API仕様書のおともにどうぞ。


概要

Closeableは、閉じることができるデータの転送元または転送先です。 終了メソッドは、オブジェクトが保持しているリソース(開いているファイルなど)を解放するために呼び出されます。

クラス構成

Closeable インタフェースは、リソース解放が必要なクラスに実装されます。
つまり、Closeable を実装しているオブジェクトは、使い終わったら close メソッドを呼び出してリソースを解放する必要があります。

ByteArrayInputStream など、一部 close を呼び出さなくても問題ないクラスもあります。

また、Closeable は AutoCloseable を拡張しています。
そのため try-with-resources文 が使えます。

try-with-resources文を使うことで、明示的に close を呼び出さずにリソースを解放できます。
基本的には、try-with-resources文を使うことをおすすめします。

関連: try-with-resources文でリソースを自動的に解放

final var path = Path.of("R:", "java-work", "aaa.txt");
System.out.println(path); // R:\java-work\aaa.txt

// try-with-resources文でリソースを解放します。
try (final var writer = Files.newBufferedWriter(path)) {

    writer.write("abcd");
    writer.newLine();

    writer.write("XYZ");
    writer.newLine();
}

final var str = Files.readString(path);
System.out.print(str);

// 結果
// ↓
//abcd
//XYZ

メソッド

void close ()

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

final var path = Path.of("R:", "java-work", "aaa.data");
System.out.println(path); // R:\java-work\aaa.data

try (final var outputStream = Files.newOutputStream(path)) {
    outputStream.write(10);
    outputStream.write(20);
    outputStream.write(30);
}

final var bytes = Files.readAllBytes(path);
System.out.println(Arrays.toString(bytes)); // [10, 20, 30]
// try-with-resources文を使わない例です。
final var path = Path.of("R:", "java-work", "aaa.data");
System.out.println(path); // R:\java-work\aaa.data

final var outputStream = Files.newOutputStream(path);
try {
    outputStream.write(10);
    outputStream.write(20);
    outputStream.write(30);
} finally {
    outputStream.close();
}

final var bytes = Files.readAllBytes(path);
System.out.println(Arrays.toString(bytes)); // [10, 20, 30]

関連記事

ページの先頭へ