IOException ってどういうときに起こるのでしょうか?
http://www.atmarkit.co.jp/fjava/rensai2/javaent1 …
を見て勉強しています。
catch ( IOException e) {
System.out.println( "キーボードが故障しているのかもしれません" );
}
と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「
NumberFormatException の方はわかるのですが・・・
No.1
- 回答日時:
インプットが InputStreamReader(System.in)
ということで、キーボード入力から受け取りますよね。
そこで発生する IOException はキーボード入力でエラーがあった場合に発生すると考えられます。
キーボードでエラーが発生するケースとは何が考えられるでしょうか?
ということで、この例では
System.out.println( "キーボードが故障しているのかもしれません" );
となっています。
別にハードの故障を読み取ってるわけではないので「かもしれません」になっているのです。
No.2
- 回答日時:
BufferedReader の readLine メソッドが IOException を起こす場合のひとつは BufferedReader が関連付けられているストリームがすでにクローズしていた場合があります。
これは BufferedReader クラスのソースコードを見てみると、そのクラスの private なメソッドである ensureOpen で IOException を throw しているのが分かります。しかし、これは複数あるかもしれないケースのひとつでしかなく、また、あくまでも内部仕様です。
BufferedReader クラスを使う側からすれば readLine が IOException を起こすかもしれない、ということだけを知っていれば良いです。かと言って、外部仕様である、
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
を見ても、単に「IOException - 入出力エラーが発生した場合」としか書かれていないので、ご質問のような疑問が生まれたのだろうと思います。
このような現状においては、アプリケーションプログラムの側では、「IO エラーです」のようなメッセージの表示でお茶を濁すしかないと思います。下手に意訳するのはやめたほうが無難かもしれません。
挙げられた URL のページの解説も、ほどほどに見られることにとどめられたほうが良いと思います。
この回答への補足
ありがとうございます。
やはり、具体的なイメージが湧かないのですが、
「BufferedReader が関連付けられているストリームがすでにクローズ」
というのは、何らかのトラブル(例えば、OSの不具合)とかで起こる者なのでしょうか?具体的な例とか状況でわかりやすいものはないでしょうか?
まだIOErrorに巡り会ったことがないので・・。
No.3ベストアンサー
- 回答日時:
現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。
ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。
さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。
追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}
追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();
ありがとうございます。
>現実的には、キーボードからの入力でIOExceptionが発生することは、
>ほとんどあり得ないと思います。
>そもそも、キーボードが故障していたとしても、
>IOExceptionは投げられないでしょう。
なるほど。
>追伸2:
>そのプログラムでIOExceptionを発生させる最も簡単な方法は、
>readLine()を呼び出す前に
>標準入力(System.in)を閉じてしまうことです。
>System.in.close();
具体例のおかげで、だいぶん分かった気がします。
この場合、InputStream に、もともとの想定以外の
動作をしてやると起こるのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
誕生日にもらった意外なもの
みなさんがもらった誕生日プレゼントで面白いものがあったらぜひ教えてください!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
flush()とclose()について
Java
-
Path型をString型へ変換する(Java)
Java
-
System.err. printlnとSystem.out.printlnはどう違うんでしょうか?
Java
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
6
close()で例外が投げられる理由
Java
-
7
フォーム上で押されたボタンによってサーブレットの処理を変えたい
Java
-
8
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
9
Eclipseの対応する括弧の強調表示色変更
Java
-
10
java初心者です。入力されたのが数字なら出力し、数字以外が入力されたらもう一度入力する繰り返し処理
Java
-
11
Javaで改行などが出来ないのです。
Java
-
12
1文字って1バイトだったっけ?
その他(パソコン・スマホ・電化製品)
-
13
レコード件数の表示
Java
-
14
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
15
Log4jで機能毎に別ファイルへ出力する方法
Java
-
16
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
17
【C#/Java?】try-catchでcatchせずにfinallyは一般的?
その他(プログラミング・Web制作)
-
18
Eclipseのアンインストールの仕方
Java
-
19
エラーを起こす方法
Oracle
-
20
Java-jspの画面入力値保持について
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
助けてください!!キーボード...
-
「G」の小文字入力の切り替え
-
IOException ってどういうとき...
-
キーボードの子音が入力出来ない
-
iPad の分割キーボードでトグル...
-
PC周辺機器 この部品は何ですか
-
acerのタブレットについて
-
ノートPCのキーボードで数字...
-
エクスクラメーションマークの...
-
日本語 PS/2 キーボード (106/1...
-
times new romanでギリシャ文字...
-
中国語の入力の仕方
-
キーボードの半額/全額のキーで...
-
キーボードの入力がかなり遅れ...
-
アンダバー
-
キーボード入力できない
-
バッファロー社製『BSHSBT04BK...
-
ノートパソコンですが急にキー...
-
86キーのキーボード
-
PCのキーボードにFnキーが無い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
助けてください!!キーボード...
-
「G」の小文字入力の切り替え
-
IOException ってどういうとき...
-
ノートPCのキーボードで数字...
-
iPad の分割キーボードでトグル...
-
キーボードの子音が入力出来ない
-
単語登録 + 単語で日付と変...
-
【タブレットPC】フォーム画面...
-
times new romanでギリシャ文字...
-
キーボード入力(キー(「Y」「...
-
パソコンで数字が連続して羅列...
-
つにてんてんはどうやってタイ...
-
スマホでフランス語のeを入力...
-
ノートパソコンのキーボードが...
-
iPadでキーボードの中に英語(日...
-
日本語のキーボードでハングル...
-
①Excel シートに、「=」を入力...
-
パソコン入力が、おかしくなり...
-
二重鍵括弧 『』について教え...
-
シフト+ろでアンダーバーを入力...
おすすめ情報