2012-12-19 110 views
0

可能重複:
Why do I get the 「Unhandled exception type IOException」?未處理的異常類型爲IOException

我嘗試使用下面的算法來解決歐拉#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(); //### 
} 
+3

閱讀[例外教程](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html),然後利用這些知識要麼將代碼包裝在try/catch中,要麼拋出異常 - 您的選擇。 –

回答

5

是,IOException檢查的異常,這意味着你要麼需要抓住它,或宣佈你的方法將它扔了。 如果拋出異常,想要發生什麼?

請注意,無論如何,您通常應該在finally區塊內關閉reader,以便在面臨另一個異常時關閉。

查看Java Tutorial lesson on exceptions瞭解有關已檢查和未檢查異常的更多詳細信息。

+0

我向方法簽名添加了拋出,但如果我不包含try {},我將如何包含finally塊? – Bennett

+0

@JamesRoberts - 你可以使用'try/finally'結構(沒有任何'catch'塊)。另一種方法是,如果您使用的是Java 7,則使用[try-with-resources](http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)語句。 –

+0

此外,我不再在該方法中獲取錯誤,但在方法調用中出現「未處理的異常類型IOException」錯誤。 – Bennett

0

包裝在try/catch塊中以捕獲異常。

如果你不這樣做,它會去處理。

0

如果您無法讀取指定文件會發生什麼情況? FileInputStream將拋出一個異常,Java要求您必須檢查並處理它。

這種類型的異常被稱爲檢查異常。 未選中例外情況存在和Java並不需要你來處理這些(主要是因爲他們unhandable - 例如OutOfMemoryException

請注意,您的操作可能包括捕獲它和忽略它。這不是一個好主意,但Java不能真正確定:-)

2

一個解決方案:改變

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) {} 
    } 
} 
相關問題