我对Java比较新,我总是遇到代码中的Try / Catch函数问题,所以我想知道你们是否可以帮助我。
我遇到的问题是我写了一个try / catch但是我收到一条错误消息,说永远不会抛出异常。我在我的整个代码的另一部分写了一个类似的声明,它确实工作正常,所以我想知道这个问题是什么。
以下是代码:
public String getMatchedLogs(String matchStr, File logFile) {
String fileLine = "";
try {
Scanner ipScan = new Scanner(fileLine);
if (fileLine.indexOf(matchStr) > -1) {
output += fileLine;
}else{
System.out.println(fileLine.indexOf(""));
}
} catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
return fileLine;
} //end getMatchedLogs
错误在catch中,它表示永远不会抛出异常。所以如果你们能给我一些有关正在发生的事情的见解,我会非常感激。
答案 0 :(得分:2)
您实际上并没有使用参数File logFile
执行任何操作,而是仅使用您定义的空String fileLine = "";
。因此,没有文件访问权限,因此不可能有FileNotFoundException
。
答案 1 :(得分:1)
养成查找方法的习惯,看看他们是否按照你的想法行事。
File对象的Scanner构造函数打开一个文件并声明它可以抛出FileNotFoundException http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.io.File)
String的Scanner构造函数扫描字符串本身并且不打开文件,因此不需要抛出异常 http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.lang.String)
顺便说一句:您的代码似乎正在使用扫描程序写入传入的字符串(“filine”)。字符串在Java中是不可变的,并且在传递给方法时不能更改。
答案 2 :(得分:0)
FileNotFound
异常。您没有使用logFile
,因此无法抛出FileNotFoundException
。
答案 3 :(得分:0)
如果你有一个编译器知道永远不会发生的catch处理程序,java编译器可能会抱怨。 (与Scala等新语言相比,Java异常规则往往非常严格)
答案 4 :(得分:0)
您正在捕获一种特殊类型的异常,而这种异常并没有被抛出。
所以你应该尝试:
catch (Exception e) {}
捕捉任何异常。
答案 5 :(得分:0)
如果Exception
以外的任何FileNotFoundException
无法捕捉到你的情况。最好使用如下..
try {
try {
Scanner ipScan = new Scanner(fileLine);
if (fileLine.indexOf(matchStr) > -1) {
output += fileLine;
} else {
System.out.println(fileLine.indexOf(""));
}
} catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
} catch (Exception e) {
// error log here
}