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

Java 由于IOException,我的程序正在输出警告?,java,exception-handling,ioexception,Java,Exception Handling,Ioexception,如何修复此警告:无法访问的catch子句?我见过有人在FileNotFound之后捕获IOException,我不知道问题出在哪里 公开募捐{ int count = 0; try { Scanner scan = new Scanner(new FileInputStream(file)); while(scan.hasNext()) { scan.next(); count++;

如何修复此警告:无法访问的catch子句?我见过有人在FileNotFound之后捕获IOException,我不知道问题出在哪里

公开募捐{

    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();
    }

你可以去掉这些代码

} catch(IOException exception) {
    exception.printStackTrace();
}
在try块中引发异常的唯一原因是FileNotFoundException及其IOException的子类。要进一步跟踪异常,这应该足够了:

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

你可以去掉这些代码

} catch(IOException exception) {
    exception.printStackTrace();
}
在try块中引发异常的唯一原因是FileNotFoundException及其IOException的子类。要进一步跟踪异常,这应该足够了:

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

从代码中引发的唯一异常(在IOException异常家族中)是FileNotFoundException。由于您已经专门为其设置了catch块,因此IOException catch块变得多余

在其他情况下,它们可能在TIGET catch中做其他事情,也在IOExchange家族中抛出一个不同的异常,或者抛出IOExExt本身,因此捕获IOExt是有意义的。例如,考虑此代码:

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

可以看出,扫描器在读取过程中会吞噬底层流引发的任何IOException。如果您关心如何处理文件读取问题,则有两种选择:

a不使用扫描仪,而是使用一些较低级别的API,如读卡器或InputStream

b一旦while循环完成,尽管这是一件非常罕见的事情,但还是要这样做:

if (scan.ioException() != null) { 
    throw scan.ioException(); 
}

从代码中引发的唯一异常(在IOException异常家族中)是FileNotFoundException。由于您已经专门为其设置了catch块,因此IOException catch块变得多余

在其他情况下,它们可能在TIGET catch中做其他事情,也在IOExchange家族中抛出一个不同的异常,或者抛出IOExExt本身,因此捕获IOExt是有意义的。例如,考虑此代码:

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

可以看出,扫描器在读取过程中会吞噬底层流引发的任何IOException。如果您关心如何处理文件读取问题,则有两种选择:

a不使用扫描仪,而是使用一些较低级别的API,如读卡器或InputStream

b一旦while循环完成,尽管这是一件非常罕见的事情,但还是要这样做:

if (scan.ioException() != null) { 
    throw scan.ioException(); 
}

@nullpointer IOException中的任何内容仍会引发警告,如果在读取文件时出现异常,我希望能够打印出一条通用错误消息。@Bob虽然可以捕获通用异常,即IOException,但这不应该是一个好的做法。在当前代码块中,新的FileInputStreamfile如果文件是字符串,uld只会抛出FileNotFoundException。现在有意义,以后会记住这一点。谢谢!@nullpointer IOException中的任何内容都会抛出警告,如果在读取文件时出现异常,我希望能够打印出一条通用错误消息。@Bob尽管可以捕捉到错误消息通用异常,即IOException,但这不应该是一个好的做法。在当前的代码块中,如果文件是字符串,新FileInputStreamfile只会抛出FileNotFoundException。现在有意义,以后会记住这一点。谢谢!非常感谢。我决定只删除IOException。非常感谢我决定删除IOException。