2009-08-09 57 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