了解Java的try/catch
我目前正在为学校编写一个应用程序,它是一个迷你搜索引擎。在执行时,它对作为参数包含的文本文件的内容进行索引。我以前没有使用过了解Java的try/catch,java,Java,我目前正在为学校编写一个应用程序,它是一个迷你搜索引擎。在执行时,它对作为参数包含的文本文件的内容进行索引。我以前没有使用过try和catch方法,我们只是将此代码作为包含在我们的程序中: Scanner inputFile = null; try { inputFile = new Scanner(new File("dog.txt")); } catch (FileNotFoundException fe) { System.out.println("File not fou
try
和catch
方法,我们只是将此代码作为包含在我们的程序中:
Scanner inputFile = null;
try {
inputFile = new Scanner(new File("dog.txt"));
} catch (FileNotFoundException fe) {
System.out.println("File not found!");
}
我创建了一个方法,该方法循环遍历参数,并为找到的每个唯一单词向数组中添加一个新对象。问题是每当我运行应用程序时,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!");
}
}
}
静态void createIndex(字符串[]args){
对于(int i=0;i
如果更换线路:
System.out.println("File not found!");
以下几行:
System.out.println("File not found! " + fe);
fe.printStackTrace();
它应该准确地告诉您异常是什么(以及发生异常的行号)
下一步是在扫描器
构造函数中使用完整路径名(例如,“/tmp/dog.txt”
)。可能是您的IDE从一个不同于您所认为的目录运行代码
您可以确定您所处的实际目录:
File here = new File (".");
try {
System.out.println ("Current directory: " + here.getCanonicalPath());
} catch(Exception e) {
e.printStackTrace();
}
如果更换该行:
System.out.println("File not found!");
以下几行:
System.out.println("File not found! " + fe);
fe.printStackTrace();
它应该准确地告诉您异常是什么(以及发生异常的行号)
下一步是在扫描器
构造函数中使用完整路径名(例如,“/tmp/dog.txt”
)。可能是您的IDE从一个不同于您所认为的目录运行代码
您可以确定您所处的实际目录:
File here = new File (".");
try {
System.out.println ("Current directory: " + here.getCanonicalPath());
} catch(Exception e) {
e.printStackTrace();
}
检查以确保文件位于正确的路径中(如果您使用的是eclipse,请在执行之前将运行路径设置为文件的目录) 否则,请使用文件的完整路径名,并查看是否仍存在此错误 如果你移动了线
System.out.print((args[i]) + " being indexed ... ");
排队
inputFile = new Scanner(new File(args[i]));
我几乎可以肯定,“正在编制索引的文件…”不会打印检查以确保文件位于正确的路径中(如果使用eclipse,请在执行之前将运行路径设置为文件的目录) 否则,请使用文件的完整路径名,并查看是否仍存在此错误 如果你移动了线
System.out.print((args[i]) + " being indexed ... ");
排队
inputFile = new Scanner(new File(args[i]));
我几乎可以肯定,“正在编制索引的文件…”不会打印我要做的第一件事是切换这两行,这样只有在实际找到该文件时,您才会收到消息:
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),文件构造函数不会抛出FileNotFoundException,因此必须执行其他操作。是时候让调试器出来并找出引发异常的确切位置,或者至少获取一个堆栈跟踪,显示引发异常的位置了
此外,如果程序的工作目录不在文件所在的位置,您可能必须限定要加载的文件的路径;从您的输出来看,您似乎没有传递任何路径,您可能必须这样做。我要做的第一件事是切换这两行,这样您只会在文件实际已加载时收到消息nd:
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),文件构造函数不会抛出FileNotFoundException,因此必须执行其他操作。是时候让调试器出来并找出引发异常的确切位置,或者至少获取一个堆栈跟踪,显示引发异常的位置了
此外,如果程序的工作目录不在文件所在的位置,您可能必须限定要加载的文件的路径;从您的输出来看,您似乎没有传递任何路径,您可能必须这样做。感谢pax,我发现我意识到文件位于错误的目录中,以及大家指出的两行b以错误的顺序私奔。感谢您提供额外的错误检查代码。肯定会派上用场的。感谢pax,我发现我的文件位于错误的目录中,以及大家在下面指出的两行错误的顺序。感谢您提供额外的错误检查代码。肯定会派上用场的。例外告诉你找不到文件。那么你知道那些
.txt
文件在哪里吗?你能在当前目录中看到它们吗?谢谢大家。我想是因为它正在打印找到它们的文件的名称…显然是从我写的参数中得到的。所以移动了文件并交换了两行f代码,你们都指出了,效果很好!我建议将try块包装为