web-dev-qa-db-ja.com

「未処理の例外タイプIOException」を受け取るのはなぜですか?

次の簡単なコードがあります。

import Java.io.*;
class IO {
    public static void main(String[] args) {    
       BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
       String userInput;    
       while ((userInput = stdIn.readLine()) != null) {
          System.out.println(userInput);
       }
    }
}

そして、次のエラーメッセージが表示されます。

----------
1. ERROR in io.Java (at line 10)
    while ((userInput = stdIn.readLine()) != null) {
                        ^^^^^^^^^^^^^^^^
Unhandled exception type IOException
----------
1 problem (1 error)roman@roman-laptop:~/work/Java$ mcedit io.Java 

誰にもアイデアはありますか?私はsum Webサイトで提供されているコードを単純化しようとしました( here )。単純化しすぎましたか?

30
Roman

メインメソッドに「スローIOException」を追加する必要があります。

public static void main(String[] args) throws IOException {

[〜#〜] jls [〜#〜] で、(Javaに固有の)チェック例外についてもう少し読むことができます。

50
Marcin

Javaには「チェック済み例外」と呼ばれる機能があります。つまり、ある種の例外、つまりRuntimeExceptionではなくExceptionをサブクラス化する例外があり、メソッドがそれらをスローする可能性がある場合、must throws宣言にそれらをリストします。例:void readData() IOExceptionをスローします。 IOExceptionはそれらの1つです。

したがって、throws宣言にIOExceptionをリストするメソッドを呼び出す場合、独自のthrows宣言にリストするか、キャッチする必要があります。

チェック例外の存在理由は、ある種の例外については、発生する可能性があるという事実を無視してはならないということです。なぜなら、それらの発生はプログラムエラーではなく、非常に定期的な状況だからです。そのため、コンパイラは、このような例外が発生する可能性を忘れないようにするのに役立ち、何らかの方法で処理する必要があります。

ただし、Java標準ライブラリのすべてのチェック済み例外クラスがこの原理に適合するわけではありませんが、それはまったく異なるトピックです。

43
jkff

次のコードスニペットで再試行してください。

import Java.io.*;

class IO {
    public static void main(String[] args) {    
        try {
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
            String userInput;    
            while ((userInput = stdIn.readLine()) != null) {
                System.out.println(userInput);
            }
        } catch(IOException ie) {
            ie.printStackTrace();
        }   
    }
}

try-catch-finallyを使用するほうが、throwsを使用するよりも優れています。 try-catch-finallyを使用すると、エラーの発見とデバッグが簡単になります。

11
Parth

次のようにメソッドに「IOExceptionをスロー」を追加します。

public static void main(String args[]) throws  IOException{

        FileReader reader=new FileReader("db.properties");

        Properties p=new Properties();
        p.load(reader);


    }
0
harun ugur

キーボードからの入力の読み取りは、インターネットからのファイルのダウンロードに似ています。Java ioシステムは、InputStreamまたはReaderを使用して読み取るデータのソースとの接続を開きます。 IOExceptionsを使用して中断することができます

InputStreamsとBufferedReaderを使用することの意味を正確に知りたい場合 このビデオ

0
vivz