2009-08-09 54 views
1

我目前正在爲一個迷你搜索引擎的學校編寫一個應用程序。在執行時,它將包含爲參數的文本文件的內容編入索引。我沒有用之前的trycatch方法,而我們只是給這個代碼作爲我們的節目包括:瞭解Java的嘗試/趕上

Scanner inputFile = null; 
try { 
    inputFile = new Scanner(new File("dog.txt")); 
} catch (FileNotFoundException fe) { 
    System.out.println("File not found!"); 
} 

我已經創建了通過ARGS循環,並增加了一個新對象的方法找到每個唯一字的數組。問題是catch方法似乎仍然執行,每當我運行該應用程序,我不能解決原因。這是輸出:

dog.txt被索引...文件未找到!
被索引的cat.txt ...文件未找到!

我已經包括下面的方法。如果有人感冒可能指出我要出錯的地方,那會很好。

static void createIndex(String[] args) { 
    for(int i = 0; i < args.length; i++) { 
     Scanner inputFile = null; 
     try { 
      System.out.print((args[i]) + " being indexed ... "); 
      inputFile = new Scanner(new File(args[i])); 
      while(inputFile.hasNext()) { 
       boolean isUnique = true; 
       String newWord = inputFile.next().trim().toLowerCase(); 
       for(int j = 0; j < uniqueWords; j++) 
        if(newWord.equals(wordObjects[j].getWord())) { 
         wordObjects[j].setFile(args[i]); 
         isUnique = false; 
        } 

       if(isUnique) { 
        wordObjects[uniqueWords] = new WordIndex(newWord, args[i]); 
        uniqueWords++; 
       } 
      } 

      System.out.print("done"); 

     } catch(FileNotFoundException fe) { 
      System.out.println("File not found!"); 
     } 
    } 
} 
+0

謝謝大家。我以爲是因爲它打印了它找到的文件的名字......顯然它是從我寫的參數中得到的。所以移動這些文件並交換了你們所指出的兩行代碼,並且工作正常! – 2009-08-09 07:34:57

+0

我建議儘可能使用盡可能少的代碼來包裝try塊。在這種情況下,這並不重要,但由於您只希望在前幾行中引發FileNotFoundException,請將try塊放在那裏,而不是放在循環的整個內容中。如果沒有找到該文件,則嘗試執行循環的其餘部分沒有多大意義,因此可以在catch塊中放置「continue」。另一方面,太多的「繼續」代表意大利麪代碼,所以要小心。 – MatrixFrog 2009-08-09 19:26:19

+0

例外是告訴你沒有找到文件。那麼你知道那些'.txt'文件在哪裏嗎?你可以在當前目錄中看到它們嗎? – 2009-08-09 07:17:30

回答

5

如果更換行:

System.out.println("File not found!"); 

這些行:

System.out.println("File not found! " + fe); 
fe.printStackTrace(); 

它應該告訴你的例外是什麼(和它發生的行號)。

下一步是在Scanner構造使用路徑名(例如,"/tmp/dog.txt")。這可能是因爲您的IDE正在從您認爲不同的目錄運行您的代碼。

你可以找出你在很實際目錄:

File here = new File ("."); 
try { 
    System.out.println ("Current directory: " + here.getCanonicalPath()); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 
+0

謝謝pax,我發現我的文件在錯誤的目錄中,以及下面所有人都按錯誤順序指出的兩行。感謝那些額外的錯誤檢查代碼。一定會派上用場。 – 2009-08-09 07:37:02

0

檢查以確保該文件是在正確的道路(如果你使用Eclipse,設置運行路徑該文件的目錄執行之前。

否則,使用全路徑名的文件,看看是否仍然得到這個錯誤。

如果移動線

System.out.print((args[i]) + " being indexed ... "); 

行之後

inputFile = new Scanner(new File(args[i])); 

我幾乎可以肯定的是「文件被索引...」將不打印

3

我首先要做的是圍繞這兩條線開關所以你只有文件實際上已發現得到的消息:

 System.out.print((args[i]) + " being indexed ... "); 
     inputFile = new Scanner(new File(args[i])); 

基本上,把它們放在這樣的:

 inputFile = new Scanner(new File(args[i])); 
     System.out.print((args[i]) + " being indexed ... "); 

這種方式更容易誤導恕我直言。

除此之外,代碼對我來說看起來還不錯,但我們錯過了Scanner的代碼 - 我只是檢查並根據Java文檔(至少是1.4.2),File構造函數不會拋出一個FileNotFoundException,所以別的東西必須。有時間讓調試器出來,準確找出拋出異常的位置,或者至少得到一個堆棧跟蹤,以顯示拋出它的位置。

此外,如果程序的工作目錄不在文件所在的位置,您可能必須限定要加載的文件的路徑;從你的輸出看起來你沒有經過任何路徑,你可能不得不這樣做。

+0

感謝蒂莫,就是這樣。 :) – 2009-08-09 07:37:57