プログラミングの用語一覧へ
このページの目次

IOExceptionとは?

読み方:ioexception

最終更新:2026/08/18

3秒でわかる

ファイルや通信など外部との入出力が失敗したときに Java が投げる検査例外。catch か throws をコンパイラが必ず要求します。

もう少し詳しく

どういうものか

java.io.IOException は、ファイルの読み書き、ネットワーク通信、標準入出力といった外部とのやり取りが失敗したときに投げられる例外です。検査例外 (checked exception) に分類されるため、投げる可能性のある処理を書いた時点で、catch するか throws を宣言するかをコンパイラが要求します。書かなければコンパイルが通りません。

なぜ必要か

計算はコードが正しければ必ず成功しますが、入出力はそうではありません。ファイルが消えている、権限が無い、ディスクが一杯、通信が切れた、といった事情はプログラムの外側で起きます。Java はこの「必ず起こりうる失敗」をで表現し、書き手に対処を強制する方針を取りました。IOException を書かされるのが面倒に感じる場面もありますが、それは失敗経路を無視できない仕組みが働いている証拠です。

具体例

import java.io.*; import java.nio.file.*; public class ReadFile { public static void main(String[] args) { Path path = Path.of("data.txt"); try (BufferedReader br = Files.newBufferedReader(path)) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (NoSuchFileException e) { System.err.println("ファイルが見つかりません " + e.getFile()); } catch (IOException e) { System.err.println("読み込みに失敗しました " + e.getMessage()); } } }

つまずきやすいところ

  • catch ブロックを空にして通してしまうと、失敗が握りつぶされて原因不明の不具合になります。最低でもログに残します。

  • catch の順番はサブクラスが先です。FileNotFoundException は IOException のサブクラスなので、IOException を先に書くと後ろが到達不能でコンパイルエラーになります。

  • close の呼び忘れでファイルハンドルが枯渇します。try-with-resources を使えば自動で閉じます。

  • Stream の map や forEach に渡すラムダの中では検査例外を投げられません。ラムダ内で catch して非検査例外に包み替えるか、通常の for に戻します。
  • 似た用語との違い

    例外検査されるか主な原因
    IOExceptionされる外部要因の入出力失敗
    UncheckedIOExceptionされないIOException を包み直して伝播させたいとき
    NullPointerExceptionされないコードの書き間違い

    知識のつながり

    サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

    現在地IOExceptionプログラミング

    LEARN BY DOING

    この用語を、教材で使ってみる

    直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

    この用語を扱うコース

    コース

    Java 中級:コレクション・Stream・例外処理

    64レッスン
    コース

    Java入門:基礎文法編

    69レッスン
    コース

    Java Silver対策

    55レッスン
    Javaコースの全編を見る