2014-01-23 61 views
-1

有什麼不對?爲什麼它給了我「未報告的異常java.io.FileNotFoundException」?這是我正在學習的一本書的練習,我無法弄清楚什麼是錯誤的,它看起來完全像他們提供的例子。該文件位於相同的文件夾中。什麼是錯的?爲什麼它給我未報告的異常java.io.FileNotFoundException?

import java.io.*; 
import java.util.*; 
public class Mine 
{ 
    public static void main(String[] args) 
    { 
     Scanner inFile = 
      new Scanner(new FileReader("Ch3_Ex7Data.txt")); 
     PrintWriter outFile = new PrintWriter("Ch3_Ex7Output.dat"); 

     String lastName; 
     lastName = inFile.next(); 
     System.out.println(lastName); 
     inFile.close(); 
     outFile.close(); 
    } 
} 

Files

+0

在什麼文件夾? –

+0

它沒有找到您正在嘗試閱讀的文件。文件在哪裏與編譯的類文件有關? –

+0

更重要的是,在執行程序時,文件在哪裏與當前目錄相關? – keshlam

回答

0

FileNotFoundException是一個檢查異常。你必須嘗試/抓住它。文件是否存在並不重要。 FileNotFoundException擴展IOException,因此您只需要捕獲IOException。這應該編譯:

import java.io.*; 
import java.util.*; 
public class Mine 
{ 
    public static void main(String[] args) 
    { 
     Scanner inFile = null; 
     PrintWriter outFile = null; 
     try { 
      try { 
       inFile = new Scanner(new FileReader("Ch3_Ex7Data.txt")); 
       outFile = new PrintWriter("Ch3_Ex7Output.dat"); 

       String lastName; 
       lastName = inFile.next(); 
       System.out.println(lastName); 
      } finally { 
       if(inFile != null) 
        inFile.close(); 
       if(outFile != null) 
        outFile.close(); 
      } 
     } catch(IOException ioe) { 
      ioe.printStackTrace(); 
     } 
    } 
} 
+0

林不知道嘗試的概念是什麼,我還沒有知道,但它的工作。非常感謝你! – AwesomeTN

+1

基本上,如果找不到文件,構造函數將拋出此異常。嘗試/ catch意味着控制流將跳出,如果有的話,跳到catch塊。 (順便說一句,我用try ...顯示的東西... finally ... close並不是完全必要的,但是是一種最佳實踐。Java 7+也有[try-with-resources](http://docs.oracle.com/javase /tutorial/essential/exceptions/tryResourceClose.html)來替換成語。)在運行時拋出異常是可能的,在這種情況下@peeskillet建議的可能會有所幫助。相對目錄很挑剔。 – Radiodef

1

FileNotFoundException手段,嗯......那麼文件不能被發現。

確保"Ch3_Ex7Data.txt"文件是項目根目錄的直接子項。當你剛剛使用(「Ch3_Ex7Data.txt」)相對路徑時,讀取文件,這是IDE將首先搜索的位置。

ProjectRoot 
     Ch3_Ex7Data.txt 
     src 

注:在未來,您將學習不是生產/部署的目的,最好的解決辦法,當文件爲t成爲一個嵌入式的資源,但上面的應該爲你工作,直到你深入研究走向生產階段。


UPDATE到OP評論

「而且我現在應該在其他方法的習慣得到?如果是的話是什麼樣子」

你」我希望將來能夠學習它,但您首先需要了解InputStreams。所以這可能是不成熟的。但是如果你不想了解更多,只需搜索「從jar中讀取文本文件」。你會找到答案,那會是這樣的

InputStream is = getClass().getResourceAsStream("Ch3_Ex7Data.txt"); 

如果你的文件現在都必須位於類路徑,所以你的文件結構將代替從上述結構變更爲這個下面

ProjectRoot 
      src 
      Ch3_Ex7Data.txt 
+0

我應該在哪裏添加該代碼。我現在應該習慣另一種方法嗎?如果是這樣的話是什麼樣子?謝謝 – AwesomeTN

+0

這不是代碼。這是你的文件結構 –

+0

所有的文件都在同一個文件夾中 – AwesomeTN

相關問題