2011-04-02 50 views
2

我認爲這是基本的東西,但我不知道該怎麼做。爲什麼我會得到IOException never thrown in body of corresponding try statementJava catch IOException

public static void main(String[] args) 
    { 
     File inputFile = null ; 

     try 
     { 
      inputFile = new File("records.txt") ; 
     } 
     catch (IOException e) 
     { 
      System.out.print("file not found!") ; 
     } 

回答

5

File構造函數本身並沒有太多的工作。

直到您真正開始執行實際操作時才拋出IOExceptions。

+0

好的和簡單的答案+1。我可能會添加IOException異常。如果File構造函數可以拋出它,它不會編譯沒有捕獲...如果你刪除捕獲你看到它仍然編譯,因此IOException不會拋出那裏。 – 2011-04-02 16:14:59

1

File(String)不會丟IOException,所以你不能在那個時候捕獲一個。

5

它從不拋出IOException。創建一個File對象不會將它連接到磁盤上的任何東西。也就是說,沒有IO。

如果您嘗試讀取或寫入磁盤上沒有相應文件的File對象,則會發生IOException異常。例如,如果您嘗試從實際不在磁盤上的文件獲取CanonicalPath。

2

因爲你可以用任何你想要的字符串實例化文件對象。稍後,當您嘗試讀取/寫入/打開實際文件時,您將得到異常。

0

如果要檢查文件是否存在,請使用file.exists()進行檢查。除此之外:

  • 從來沒有吞下例外 - 隨時登錄堆棧跟蹤或重新拋出異常(包裹它在運行時異常例如)

  • 不依賴於異常處理程序流程 - 這些應該是特例。

+0

編程中有一個普遍的原則是這樣的:「乞求寬恕比請求許可要好」。這是因爲在調用'file.exists'和調用(比如說)'file.open'之間,該文件可能已被(說)被刪除。如果您認爲該文件將存在並嘗試將其打開,否則捕獲該例外情況,則不會出現此問題。 – 2013-04-14 07:00:17