1

重複の可能性:
「Unhandled exception type IOException」が発生するのはなぜですか?

次のアルゴリズムを使用して Euler #8 を解こうとしています。問題は、巨大なコメントがある行を変更するたびにUnhandled Exception Type IOException、コメントでマークした各行にエラーが表示されること//###です。

private static void euler8()
{   
    int c =0;
    int b;
    ArrayList<Integer> bar = new ArrayList<Integer>(0);
    File infile = new File("euler8.txt");
    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(
                            new FileInputStream(infile), //###
                            Charset.forName("UTF-8")));
        while((c = reader.read()) != -1) { //###
          char character = (char) c;
          b = (int)character;
          bar.add(b); /*When I add this line*/
        }
    reader.close(); //###
}
4

4 に答える 4

6

はい、IOExceptionチェックされた例外です。つまり、それをキャッチするか、メソッドがそれをスローすることを宣言する必要があります。例外がスローされた場合、どうしたいですか?

reader別の例外に直面しても閉じられるように、finallyブロック内のを通常は閉じる必要があることに注意してください。

チェックされた例外とチェックされていない例外の詳細については、例外に関する Java チュートリアルのレッスンを参照してください。

于 2012-12-19T17:37:05.400 に答える
2

1 つの解決策: に変更

private static void euler8() throws IOException {

ただし、呼び出し元のメソッドは IOException をキャッチする必要があります。

または例外をキャッチします。

private static void euler8()
{   
    int c =0;
    int b;
    ArrayList<Integer> bar = new ArrayList<Integer>(0);
    BufferedReader reader;
    try { 
        File inFile = new File("euler8.txt");
        reader = new BufferedReader(
                            new InputStreamReader(
                            new FileInputStream(infile), //###
                            Charset.forName("UTF-8")));
        while((c = reader.read()) != -1) { //###
          char character = (char) c;
          b = (int)character;
          bar.add(b); /*When I add this line*/
        }
    } catch (IOException ex) {
       // LOG or output exception
       System.out.println(ex);
    } finally {
        try {
           reader.close(); //###
        } catch (IOException ignored) {}
    }
}
于 2012-12-19T17:39:00.967 に答える
0

try/catch ブロックでラップして、例外をキャッチします。

そうしないと取り返しがつかなくなります。

于 2012-12-19T17:37:38.687 に答える
0

指定されたファイルを読み取れない場合はどうなりますか? はFileInputStream例外をスローし、これを確認して処理する必要がある Java 命令をスローします。

このタイプの例外は、チェック例外と呼ばれます。未チェックの例外が存在し、Java ではこれらを処理する必要はありません (主に処理できないためです - 例OutOfMemoryException)

処理には、それをキャッチして無視することが含まれる場合があることに注意してください。これは良い考えではありませんが、Java はそれを実際に判断することはできません :-)

于 2012-12-19T17:37:47.597 に答える