由于IOException,我的程序正在输出警告?

时间:2018-12-01 05:53:05

标签: java exception-handling ioexception

您如何解决此警告:无法到达的catch子句?我已经看到人们在FileNotFound之后确实捕获了IOException,但我不知道是什么问题。

public void run(){

    int count = 0; 

    try {

        Scanner scan = new Scanner(new FileInputStream(file));
        while(scan.hasNext()) {
            scan.next();
            count++;

        }
    } catch(FileNotFoundException exception) {
        System.out.println(file + " not found"); 

    } catch(IOException exception) {
        exception.printStackTrace();
    }

2 个答案:

答案 0 :(得分:2)

您可以删除代码

} catch(IOException exception) {
    exception.printStackTrace();
}

原因是您的try块中引发的唯一异常是FileNotFoundException及其子类IOException。进一步跟踪该异常就足够了:

catch(FileNotFoundException exception) {
    System.out.println("" + " not found");
    exception.printStackTrace();
}

答案 1 :(得分:2)

您的代码中抛出的唯一异常(属于IOException异常家族)是FileNotFoundException。由于您已经有一个(具体来说)捕获块,因此IOException捕获块变得多余。

在其他情况下,他们可能会在try-catch中做其他事情,这也会在IOException系列中引发不同的异常(或者可能会抛出IOException本身),因此捕获{{1 }} 说得通。例如,考虑以下代码:

IOException

如果将其包装在try-catch块中,则可以同时捕获FileInputStream fis = new FileInputStream(file); fis.read(); FileNotFoundException,并且不会发出警告。第二行直接抛出IOException

可以看到here,扫描程序会吞下读取期间底层Stream抛出的任何IOException。如果您担心在处理文件读取时遇到问题,则有两种选择:

a)不要使用Scanner,而是使用一些较低级别的API,例如Reader或InputStream。

b)IOException循环完成后,请执行此操作(尽管这是非常不常见的事情):

while