2011-06-27 65 views
2

我在這裏讀了幾個涉及相同問題的線程,但解決方案無法正常工作。 :/使用FileReader導致編譯器錯誤「未處理的異常類型FileNotFoundException」

我使用Eclipse,這裏是我的程序。

package mypackage; 
import java.io.*; 


public class myclass { 


public static void main(String[] args) { 
    //String myfile = "/home/jason/workspace/myproject/src/mypackage/myscript.abc"; 
    String myfile = "src/mypackage/myscript.abc"; 
    File file1 = new File(myfile); 
    if(file1.exists()) { 
     log(myfile + " exists. length : " + myfile.length()); 
    } 
    else{ 
     log(myfile + " does not exist"); 
     //System.exit(1); 
    } 

    //FileReader fr = new FileReader("myscript.abc");//I uncomment this and die inside 


    System.out.println("\nAbsPath : " + new File(".").getAbsolutePath()); 
    System.out.println("\nuser.dir : " + System.getProperty("user.dir")); 


} 

public static void log(String s){ 
    System.out.println(s); 
} 

}

我得到的,不管我怎麼努力的錯誤,或者我把myscript.abc(其穿插現在整個項目目錄)是這樣的:

未處理的異常鍵入 FileNotFoundException myclass.java/myproject/src/mypackage

Wits end,pull hairs。

+0

,很多人說...只是周圍使用線try catch塊: 的FileReader FR =新的FileReader( 「myscript.abc」) – peshkira

+0

人啊.. 。我添加了「拋出FileNotFoundException」爲主,完全期待它仍然不運行,因爲嘿,錯誤仍然存​​在嗎? (我沒有'修復'這個錯誤,我現在只是'捕捉'它。)低,看,它的工作。我很困惑。任何人都可以解釋爲什麼這個(對我)現在神奇地工作的基本規則? – jason

+0

這只是正確的Java語法。 – MockerTim

回答

1

使用您在創建文件讀取器之前創建並驗證的文件描述符。此外,您可能會遇到使用相對路徑的問題。爲什麼整條路線被註釋掉了?無論如何,這裏是代碼:

if(file1.exists()) { 
    log(myfile + " exists. length : " + myfile.length()); 
    FileReader fr = new FileReader(file1); 
} 
+0

即使我們強迫它承認事實上該文件存在,但仍然有錯誤,找不到文件。拋出異常拋出代碼修復它,但感謝你的努力! – jason

0

您期待Eclipse在項目根目錄中運行程序。除非你對你的「運行」配置做了一些特別的事情,否則如果它真的從那裏開始,我會感到驚訝。

嘗試打印出當前的工作目錄以確保這是正確的路徑。

然後嘗試驗證bin/build目錄是否包含您的「* .abc」文件,因爲它們不是Java源文件,並且可能尚未複製到編譯輸出目錄中。

假設它們位於compliation目錄中,請重寫您的文件加載器以使用基於類laoder路徑的相對路徑。這對擴展的目錄中的.class文件集合(以及後來的打包JAR文件)來說效果很好。

0

,而不是試圖弄清楚發生了什麼事情,爲什麼不打印這是怎麼回事...

讓這改變了代碼:

log(myfile.getName() + "(full path=" + myfile.getAbsolutePath() + ") does not exist"); 

您可能會發現無論是ISN」 t使用你認爲的目錄,或者(取決於你的文件系統),它可能試圖創建一個文件名爲"src/mypackage/myscript.abc"的文件 - 即一個帶有斜槓的文件名。

+0

@downvoter - 爲什麼? – Bohemian

6

未處理的異常類型FileNotFoundException異常myclass.java/myproject的/ SRC/mypackage的

這是一個編譯錯誤。 Eclipse告訴你,你的程序不能編譯成java字節碼(所以你當然不能運行它)。現在,你可以通過簡單地聲明你的程序可能拋出這個異常來修復它。像這樣:

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

爲了將來的參考,請注意在Eclipse中的紅色波浪下劃線意味着存在編譯器錯誤。如果將鼠標懸停在問題上,Eclipse通常會提出一些非常好的解決方案。在這種情況下,一個建議是「向main添加一個throws子句」。

+0

修復它,但我不明白爲什麼。在我看來,文件仍然不能找到。爲什麼拋出異常修復? – jason

+3

您的錯誤與執行過程中是否找到實際文件無關。事實上,你甚至從來沒有執行過你的程序。 'FileNotFoundException'是一個「檢查異常」(google this),這意味着如果遇到Java,你必須說明Java應該做什麼。 –

+0

「檢查異常」 - BINGO !!!這是缺少的部分!一千個謝謝你! – jason

1

我看到你試圖以指定到文件的完整路徑,但失敗了,因爲下面的錯誤的:

你沒有申報或試圖抓住 java.io.FileNotFoundException

要解決它,你可以代替線

FileReader fr = new FileReader("myscript.abc"); 

與代碼:

try { 
    FileReader fr = 
    new FileReader("/home/jason/workspace/myproject/src/mypackage/myscript.abc"); 
} catch (FileNotFoundException ex) { 
    Logger.getLogger(myclass.class.getName()).log(Level.SEVERE, null, ex); 
} 

下面的代碼編譯成功,它應該工作:

package mypackage; 
import java.io.*; 
// It's better to use Camel style name for class name, for example: MyClass. 
// In such a way it'll be easier to distinguish class name from variable name. 
// This is common practice in Java. 
public class myclass { 

    public static void main(String[] args) { 
     String myfile = 
      "/home/jason/workspace/myproject/src/mypackage/myscript.abc"; 

     File file1 = new File(myfile); 
     if (file1.exists()) { 
      log("File " + myfile + " exists. length : " + myfile.length()); 
     } else { 
      log("File " + myfile + " does not exist!"); 
     } 

     try { 
      FileReader fr = new FileReader(myfile); 
     } catch (FileNotFoundException ex) { 
      // Do something with mistake or ignore 
      ex.printStackTrace(); 
     } 

     log("\nAbsPath : " + new File(".").getAbsolutePath()); 
     log("\nuser.dir : " + System.getProperty("user.dir")); 
    } 

    public static void log(String s) { 
     System.out.println(s); 
    } 
} 
0

你可以修復它只是聲明拋出這個異常。就像這樣:

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

 

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

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

相關問題