Java Try/Catch Issues



我对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中,它表示从不抛出异常。所以,如果你们能给我一些关于正在发生的事情的见解,我将不胜感激。

您实际上并没有使用参数File logFile执行任何操作,只是使用了您定义的空String fileLine = "";。因此,没有文件访问,因此没有FileNotFoundException的机会。

养成查找方法的习惯,看看它们是否做了你认为的事情。

File对象的Scanner构造函数打开一个文件并声明它可以抛出FileNotFoundExceptionhttp://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.io.File)

字符串的Scanner构造函数扫描字符串本身,并且不打开文件,因此不需要引发异常http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.lang.String)

顺便说一句:您的代码似乎正在使用扫描仪写入传入的字符串("filine")。字符串在Java中是不可变的,并且在传递到方法中时不能更改。

FileNotFound异常不是由扫描仪扫描行引发的。您没有使用logFile,因此不可能抛出FileNotFoundException

如果您有一个catch处理程序,而编译器知道它永远不会发生,那么java编译器可能会抱怨。(与Scala等较新语言相比,Java异常规则往往相当严格)

您正在捕获一个特定类型的异常,该异常不会在此处抛出。

所以你应该试试:

catch (Exception e) {}

以捕捉任何类型的异常。

如果除FileNotFoundException之外的任何Exception在您的情况下都无法捕获。最好按以下方式使用。。

     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
    }

最新更新