【Java初心者向け】IOExceptionとは?原因・解消方法

本サイトでは、無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の講師が、未経験者に向けてプログラミングの基礎を解説する記事を公開しています。

今回の記事のテーマは「IOException」についての解説です。

IOExceptionとは

IOExceptionとは、「IO(Input/Output)のException」という名前が表す通り、入出力処理の失敗や割り込みの発生によって生成される例外です。
チェック例外のため、必ず例外処理を行う必要があります。

例外については別の記事にて解説しています。

関連記事

プログラミングを始めたばかりの方にとって、「例外」という言葉は少し難しく感じるかもしれません。 しかし、例外はプログラムの動作を正しく理解し、扱うために欠かせない重要な概念です。 簡単に言えば、例外とは、プログラムが予期しない事態に[…]

発生例・解消方法

初学者にありがちなIOExceptionが発生する事例として、ストリームを閉じるタイミングが適切でない場合が上げられます。

例えばストリームを閉じた後にキーボード入力を読み込もうとするとIOExceptionが発生します。

例外が発生するサンプルコード

以下では、ループの1周目の最後にストリームを閉じているため、2周目の読み込み時に例外が発生します。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Test {
  public static void main(String[] args) {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String inputStr = "";
    try {
      while (true) {
        System.out.print("文字を入力してください:");

        // キーボード入力された値を受け取る
        inputStr = br.readLine();
        System.out.println(inputStr);

        // 入力値がENDである場合
        if ("END".equals(inputStr)) {
          System.out.println("入力を終了します");
          break;
        }

        // ストリームを閉じる
        br.close();
      }
    } catch (IOException e) {
      System.out.println("IOExceptionが発生しました");
      e.printStackTrace();
    }
  }
}

実行結果

文字を入力してください:MediaFive
MediaFive
文字を入力してください:IOExceptionが発生しました
java.io.IOException: Stream closed
	at java.base/java.io.BufferedReader.ensureOpen(BufferedReader.java:123)
	at java.base/java.io.BufferedReader.readLine(BufferedReader.java:321)
	at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
	at Test.main(Test.java:14)

解消例

例外を解消するためには、ストリームを適切なタイミングで閉じるように修正します。

以下の例では、finally句を追加しbr.closeをfinally句内に移動しました。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Test {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String inputStr = "";
    try {
      while (true) {
        System.out.print("文字を入力してください:");

        // キーボード入力された値を受け取る
        inputStr = br.readLine();
        System.out.println(inputStr);

        // 入力値がENDである場合
        if ("END".equals(inputStr)) {
          System.out.println("入力を終了します");
          break;
        }
      }
    } catch (IOException e) {
      System.out.println("IOExceptionが発生しました");
      e.printStackTrace();
    } finally {

      // ストリームを閉じる
      br.close();
    }
  }
}

実行結果

文字を入力してください:MediaFive
MediaFive
文字を入力してください:AKIBA TECH DREAM ACADEMY
AKIBA TECH DREAM ACADEMY
文字を入力してください:END
END
入力を終了します

「IOException」のまとめ

今回は「IOException」という例外について解説しました。

「IOException」は、入出力処理の失敗、または割り込みの発生によって生成される例外です。
例外発生時には、入出力周りに問題がないか確認しましょう。

まずは無料説明会・体験セミナー

テックドリームは無料のプログラミングスクールです。「プログラマってどういう仕事?」「自分にできるのかな?」という方も、まずは体験セミナーでプログラミングに触れてみませんか?テックドリームは未経験の方を丁寧にサポートする体制をご用意しています。不安なことや、入校までの疑問点なども気軽にご相談いただけます。

Webかんたん予約

専用の予約フォームより、およそ60秒で簡単にお申込みいただけます。

電話でのご予約

Webかんたん予約ができない場合や、ご質問がございましたら、お気軽にお電話ください。

0120-262-242
9:00~18:00(土日祝を除く)
最新情報をチェックしよう!
>テクド・リム

テクド・リム


「テクドリ」の公式キャラクター。
エンジニアだった父の影響を受けて、夢に向かって日々勉強に励むエンジニアのタマゴ。
夢は「世界を変える、すごいエンジニアになること!」

彼女が通うプログラミングスクールについては「テクドリとは」ページにて紹介中!

CTR IMG