【Java】try-with-resourcesの使い方とリソース管理

Java

はじめに

Javaでファイル操作やデータベース接続を行う際、リソースの解放(close処理) を忘れてしまうと、システムのパフォーマンス低下やメモリリークを引き起こすことがあります。FileReader や Connection のようなリソースを開いたまま閉じ忘れると、メモリリークやファイルロックが発生し、本番障害の元となってしまいます。
今回は、「try-with-resources」を使用したリソース管理について、ログとして記載していきたいと思います。

他にも、体系的にJavaを学びたい方には以下の教材がおすすめです:

👉スッキリわかるJava入門 
👉スッキリわかるJava入門 実践編

 

try-with-resourcesとは

try-with-resources は、Java 7 で導入されたリソース管理のための構文です。
ファイル・DB接続・ネットワークソケットなどの「開いた後に閉じる必要のあるリソース」を、自動でクローズ(close)してくれます。

 

基本構文

  • try() の中で宣言したリソースは、ブロックを抜けると自動的にclose()が呼ばれる。
  • 例外が発生しても確実にリソースを解放できる。
  • finally ブロックで明示的に close() を書く必要がない。
try (リソースの宣言) {
    // 処理内容
} catch (例外型 e) {
    // 例外処理
}

 

try() の中で「BufferedReader」を宣言することで、ブロックを抜けると自動的にclose()が呼ばれます。明示的にリソースの解放を行わなくても、自動的に実施してくれるため非常に簡単です。

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

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

 

複数リソースを扱いたい場合

複数のリソースを同時に管理することも可能です。
複数を指定すると、宣言した順に開かれ、逆順に閉じられるというルールがあります。

import java.io.*;

public class CopyFileExample {
    public static void main(String[] args) {
        try (
            BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
            BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))
        ) {
            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

まとめ

try-with-resources は、Javaにおけるリソース管理の機能です。これを使うだけで、リソースのクローズ忘れによるバグやパフォーマンス低下を根本から防ぐことができます。
手動でfinally ブロックに close() を呼び出す必要がなくなり、より安全で読みやすいコードを書けるようになります。
業務では、try-with-resourcesを使用しリソース管理を意識しながら実装を行っていきましょう。

 

ドキュメント

【公式ドキュメント】
Java SE Specifications (oracle.com)

 

最後に

Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)

以上、ログになります。
これからも継続していきましょう!!

Javaサーバーサイド関連
シェアする
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

タイトルとURLをコピーしました