您如何解决此警告:无法到达的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();
}
答案 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