我正在为学校编写一个迷你搜索引擎的应用程序。在执行时,它将包含为args的文本文件的内容编入索引。我之前没有使用过try
和catch
方法,我们刚刚将这段代码作为包含在我们的程序中:
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 :(得分: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]));
我几乎可以肯定“正在编入索引的文件...”将无法打印