本サイトでは、無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の講師が、未経験者に向けてプログラミングの基礎を解説する記事を公開しています。
今回の記事のテーマは「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」は、入出力処理の失敗、または割り込みの発生によって生成される例外です。
例外発生時には、入出力周りに問題がないか確認しましょう。
無料のプログラミングスクール「テクドリ」の卒業生のインタビュー動画を、インスタグラムほか公式SNSにて公開中!