理解Java try / catch

时间:2009-08-09 07:12:22

标签: java

我正在为学校编写一个迷你搜索引擎的应用程序。在执行时,它将包含为args的文本文件的内容编入索引。我之前没有使用过trycatch方法,我们刚刚将这段代码作为包含在我们的程序中:

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!");
        }
    }
}

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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所以其他必须。是时候把调试器拿出去,找出抛出异常的确切位置,或者至少得到一个堆栈跟踪,告诉你抛出它的位置。

此外,如果程序的工作目录不在文件所在的位置,则可能必须限定要加载的文件的路径;从你的输出看起来你似乎没有通过任何路径而你可能不得不这样做。

答案 2 :(得分:0)

检查以确保文件位于正确的路径中(如果您正在使用eclipse,请在执行之前将运行路径设置为文件目录。

否则,请使用文件的完整路径名,看看是否仍然出现此错误。

如果您移动了

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

之后的行
    inputFile = new Scanner(new File(args[i])); 

我几乎可以肯定“正在编入索引的文件...”将无法打印