2012-11-06 168 views
0

我應該創建一個示例程序,用於我的java任務的文件操作異常處理。自從我是C++的人以來,我無法理解。如果有人能夠指出我的代碼中的缺陷,這將非常有幫助。我指的是this文章。 Eclipse給我「FileNotFoundException的無法訪問的catch塊,這個異常永遠不會從try語句主體」錯誤中拋出。Java文件異常處理

import java.io.*; 

public class file { 

    public static void main(String[] args) { 
     String arg1 = args[0]; 
     String arg2 = args[1]; 
     System.out.println(arg1); 
     System.out.println(arg2); 
     File f1, f2; 

     try { 
      f2 = new File(arg2); 
      f1 = new File(arg1); 
     } 
     catch(FileNotFoundException e) { 
     /* 
      if(!f1.exists()) { 
       System.out.println(arg1 + " does not exist!"); 
       System.exit(0); 
      } 
      if(!f2.exists()) { 
       System.out.println(arg2 + " does not exist!"); 
       System.exit(0); 
      } 


      if(f1.isDirectory()) { 
       System.out.println(arg1 + " is a Directory!"); 
       System.exit(0); 
      } 
      if(f2.isDirectory()) { 
       System.out.println(arg2 + " is a Directory!"); 
       System.exit(0); 
      } 

      if(!f1.canRead()) { 
       System.out.println(arg1 + " is not readable!"); 
       System.exit(0); 
      } 
      if(!f2.canRead()) { 
       System.out.println(arg2 + " is not readable!"); 
       System.exit(0); 
      }*/ 
     } 
    } 
} 
+4

將來,請在您的問題中包含代碼。 –

+0

對不起,我會記住的。 –

+0

請仔細閱讀關於Java'checked'和'unchecked'的內容。第一個從'Exception'類繼承,後者從'RuntimeException'繼承。 – Jagger

回答

13

看看File constructor you're calling的文檔。 只有它聲明拋出的異常是NullPointerException。因此它不能拋出FileNotFoundException,這就是爲什麼你會收到錯誤。您無法嘗試捕獲編譯器可以證明的檢查異常永遠不會在相應的try塊中拋出。

創建File對象不檢查其存在。如果你是開放文件(例如,用new FileInputStream(...)然後可以扔FileNotFoundException ...但不只是創造一個File對象。

+0

謝謝你們! 現在好了如果我想拋出所有在代碼中提到的異常,我應該怎麼做? –

+0

@CAD_coding:你什麼意思?你的代碼不會試圖拋出任何異常。 –

+0

@JonSkeet我想拋出filenotfoundexception,eofexception,objectstreamexception,ioexception。 發現他們在這裏: http://today.java.net/pub/a/today/2003/12/04/exceptions.html –

1

這是因爲File類的構造函數有一個參數

public File(String pathname) 
Parameters:pathname - A pathname string Throws: NullPointerException - If the pathname argument is null 
Throws: NullPointerException - If the pathname argument is null 

只拋出一個異常,即NullPointerException。您的代碼嘗試捕獲與NullPointerException無關的FileNotFoundException,這就是爲什麼在Eclipse中出現此錯誤的原因:

一種方法是捕獲類別爲Exception的異常,這是Java中所有異常的類別super。另一種方法是捕獲所調用的構造拋出的所有異常(每個異常在不同的catch塊中)(可以通過瀏覽它的API輕鬆獲得)。第三種方法是隻捕獲對應用程序有意義的異常(再次由構造實際拋出),並忽略其他異常。