
IOException ってどういうときに起こるのでしょうか?
http://www.atmarkit.co.jp/fjava/rensai2/javaent1 …
を見て勉強しています。
catch ( IOException e) {
System.out.println( "キーボードが故障しているのかもしれません" );
}
と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「
NumberFormatException の方はわかるのですが・・・
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 に、もともとの想定以外の
動作をしてやると起こるのですね。
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.1
- 回答日時:
インプットが InputStreamReader(System.in)
ということで、キーボード入力から受け取りますよね。
そこで発生する IOException はキーボード入力でエラーがあった場合に発生すると考えられます。
キーボードでエラーが発生するケースとは何が考えられるでしょうか?
ということで、この例では
System.out.println( "キーボードが故障しているのかもしれません" );
となっています。
別にハードの故障を読み取ってるわけではないので「かもしれません」になっているのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- タブレット chromebookのタブレットの、キーボードが反応しません 2 2023/03/12 09:48
- マウス・キーボード キーボードが動作しなくなりました。 4 2022/04/29 09:49
- デスクトップパソコン パソコン修理について教えて下さい。 自作PCでwin7を入れていたパソコンが起動しなくなりました。 9 2022/04/24 16:21
- ノートパソコン 最近、PCがおかしくなっています。 (HPのデスクトップライゼンセブンを使用) 今まで何ともなかった 10 2022/12/04 17:11
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- いじめ・人間関係 何故記憶障害者(暗記したことを覚えることは可能)は勉強で実力が伴わなくても努力は褒められるんですか? 1 2022/06/15 18:20
- その他(パソコン・周辺機器) 2つのPCを行き来する 2 2022/06/15 01:59
- Windows 8 PCをシャットダウンしたら! 3 2022/07/20 11:32
- デスクトップパソコン 認証コードが入力できない(同じ数字が次のマスにも勝手に入力される) 8 2023/01/27 12:53
このQ&Aを見た人はこんなQ&Aも見ています
-
ショボ短歌会
ひどい短歌を詠んでください。
-
【お題】動物のキャッチフレーズ
【お題】「百獣の王 ライオン」「実は動物界最強 カバ」は分かるけど、それはちょっとピンと来ないなと思った動物のキャッチフレーズ
-
限定しりとり
文字数6文字以上の単語でしりとりしましょう
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
System.err. printlnとSystem.out.printlnはどう違うんでしょうか?
Java
-
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
SELECT 文の NULL列は?
PostgreSQL
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
.jarファイルの中身って書き換えれる?
Java
-
6
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
7
【C#/Java?】try-catchでcatchせずにfinallyは一般的?
その他(プログラミング・Web制作)
-
8
ArrayListの要素数の上限
Java
-
9
java eclipse 型に解決できません
Java
-
10
javaで質問です。 文字列2023/2/3(一桁の場合、0埋めなし)の場合にyyyyMMddに変換
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IOException ってどういうとき...
-
助けてください!!キーボード...
-
ノートPCのキーボードで数字...
-
キーボード入力(キー(「Y」「...
-
ノートパソコンのキーボードが...
-
二重鍵括弧 『』について教え...
-
「G」の小文字入力の切り替え
-
Centosについての質問です。パ...
-
キーボードの子音が入力出来ない
-
times new romanでギリシャ文字...
-
【タブレットPC】フォーム画面...
-
パソコンで数字が連続して羅列...
-
ハンガリー語のアルファベット入力
-
Windows7で数字の3が入力できない
-
acer Aspire One ノートパソコ...
-
バッファロー社製『BSHSBT04BK...
-
パソコンをwin11に買い替えたの...
-
キーボードで入力すると音声が出る
-
PCのキーボードにFnキーが無い...
-
backspaceキー押しても1文字ず...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「G」の小文字入力の切り替え
-
助けてください!!キーボード...
-
ノートPCのキーボードで数字...
-
iPad の分割キーボードでトグル...
-
IOException ってどういうとき...
-
times new romanでギリシャ文字...
-
キーボード入力(キー(「Y」「...
-
【タブレットPC】フォーム画面...
-
単語登録 + 単語で日付と変...
-
エクセルの入力がダブる・・・(...
-
①Excel シートに、「=」を入力...
-
スマホでフランス語のeを入力...
-
二重鍵括弧 『』について教え...
-
外付けキーボード
-
ノートパソコンのキーボードが...
-
キーボードの子音が入力出来ない
-
レッツノートを使ってワードに...
-
キーボードの半額/全額のキーで...
-
EXCEL 英語キーボードでF2を使...
-
ローマ字入力 syo(しょ)→sy...
おすすめ情報