2012-05-29 60 views
4

我正在創建一個小程序,它將讀取一個文本文件,其中包含大量隨機生成的數字,並生成統計數據,如平均值,中位數和模式。我創建了該文本文件,並確保該名稱與新文件聲明時完全相同。獲取FileNotFoundException即使文件存在並且拼寫正確

是的,該文件與類文件位於相同的文件夾中。

public class GradeStats { 
public static void main(String[] args){ 
    ListCreator lc = new ListCreator(); //create ListCreator object 
    lc.getGrades(); //start the grade listing process 
    try{ 
     File gradeList = new File("C:/Users/Casi/IdeaProjects/GradeStats/GradeList"); 
     FileReader fr = new FileReader(gradeList); 

     BufferedReader bf = new BufferedReader(fr);  

     String line; 

     while ((line = bf.readLine()) != null){ 
      System.out.println(line); 
     } 
     bf.close(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 


    } 
} 

}

錯誤路線如下:

java.io.FileNotFoundException: GradeList.txt (The system cannot find the file specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileReader.<init>(FileReader.java:72) 
    at ListCreator.getGrades(ListCreator.java:17) 
    at GradeStats.main(GradeStats.java:11) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
+0

請您提供關於IDE的信息和目錄結構嗎? – nhahtdh

+0

IDE是Intellij IDEA,目錄結構是包含文本文件的GradeStats-> src,以及包含此處顯示的其他3個類。 – cmcdaniels

+5

該文件可能與類文件位於同一目錄中,但通常不是當前目錄。嘗試做一個system.out.println(GradeList.getAbsolutePath()) – MTilsted

回答

10

如何加入:

String curDir = System.getProperty("user.dir"); 

打印出來。它會告訴你當前的工作目錄是什麼。那麼你應該能夠明白爲什麼它沒有找到該文件。

而不是讓你的代碼拋出,你可以檢查讓自己做一些事情,如果沒有找到文件:

File GradeList = new File("GradeList.txt"); 
if(!GradeList.exists()) { 
    System.out.println("Failed to find file"); 
    //do something 
} 

請運行下面的並粘貼輸出:

String curDir = System.getProperty("user.dir"); 
File GradeList = new File("GradeList.txt"); 
System.out.println("Current sys dir: " + curDir); 
System.out.println("Current abs dir: " + GradeList.getAbsolutePath()); 
+0

我試過了,它不會編譯,仍然是giv es FileNotFoundException。 – cmcdaniels

+0

你打印出curDir了嗎?它說了什麼? GradeList位於何處? – nuzz

+0

我在回答的底部添加了四行代碼。請在這裏運行並粘貼輸出 – nuzz

2

問題是你只指定了一個相對的文件路徑,不知道你的java應用程序的「當前目錄」是什麼。

添加該代碼,一切都將是明確的:

File gradeList = new File("GradeList.txt"); 
if (!gradeList.exists()) { 
    throw new FileNotFoundException("Failed to find file: " + 
     gradeList.getAbsolutePath()); 
} 

通過檢查的絕對路徑,你會發現該文件是當前目錄。

另一種方法是指定文件的絕對路徑創建File對象時:

File gradeList = new File("/somedir/somesubdir/GradeList.txt"); 

順便說一句,儘量堅持命名約定:與一家領先的小寫字母命名的變量,即gradeListGradeList

相關問題