2013-04-20 58 views
2

Java新手在這裏!爲什麼我的程序在文件存在時捕獲/拋出FileNotFoundException?

我正在寫一個程序來練習閱讀輸入和寫入輸出到文件。我已經完成了對程序的編碼,但是當我運行它時,程序會捕獲並繼續執行FileNotFoundException。

該文件位於該程序的源文件夾中,我甚至嘗試將它放在與該程序相關的每個文件夾中。我已經試過:

  • 聲明的方法頭
  • 周邊的部分功能於問題與try/catch塊的異常。
  • 以上兩者在一起。

下面是導致問題的相關代碼。有什麼突出的,我失蹤了?

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

    Scanner keyboard = new Scanner(System.in); 

    String playerHighestScore = "", playerLowestScore = ""; 
    int numPlayers = 0, scoreHighest = 0, scoreLowest = 0; 

    System.out.println("Enter an input file name: ");    
      String inputFileName = keyboard.nextLine();     

    String outputFileName = getOutputFileName(keyboard, inputFileName);  
    File inputFile = new File(inputFileName); 
    try { 
     Scanner reader = new Scanner(inputFile); 
     reader.close(); 
    } 
    catch (FileNotFoundException exception) {  
     System.out.println("There was a problem reading from the file.");     
     System.exit(0); 
    } 

    Scanner reader = new Scanner(inputFile); 
    PrintWriter writer = new PrintWriter(outputFileName); 
+2

爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。順便說一句 - 沿着'File f = new File(「。」)的方向在該方法中進行一些調試。 System.out.println(f.getCanonicalPath());'並檢查它指向你期望的位置。 – 2013-04-20 04:16:12

+0

我幾乎肯定它與路徑有關。這是什麼操作系統,你是否逃避斜線(Windows的反斜槓,否則正斜槓)? (例如C:\ Some Directory \ file.txt是錯誤的,它應該是** C \\:某個目錄\\ file.txt)** – Don 2013-04-20 04:31:13

+0

另外,由於您剛開始時,我建議使用固定一個用於測試程序的String對象,而不是手工輸入(例如'String file =「C:\\ Some Directory \\ file.txt」;'比您進入控制檯的東西更容易發現錯誤路徑很容易弄亂,因爲每當你手工輸入時,它就會讓事情變得更容易,但這只是我的看法而已,我不想阻止你試驗因爲這就是你學習的方式。 – Don 2013-04-20 04:36:33

回答

0

答案很簡單。如果得到FilENotFoundException,顯然原因是在給定路徑中找不到文件。
如果使用IDE,工作目錄的路徑與源目錄不同。
例如,如果您使用NetBeans,您的源文件位於/src之內。但是你的工作目錄(.)是項目目錄。
另一方面,問題可能是@Don提到的問題。如果您要採用跨平臺方法,則可以在路徑中使用「/」。它的工作原理與操作系統無關。
例如:String fileName = "C:/Directory/File.txt";
而這些路徑區分大小寫。所以請確保你使用正確的案例。 (在Windows中,這不會是一個問題,除非你打包該程序。)

相關問題