如果使用scanner对象在txt文件中读取的程序只产生FileNotFoundException,那么总是会捕获IOException / Exception吗?
这些额外代码会不再需要或重要吗?
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class TestingScanner {
public TestingScanner() {
readFile("dummy.txt");
}
public void readFile(String filePath) {
File file = new File(filePath);
Scanner scanner = null;
try {
scanner = new Scanner(file);
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.matches("^.+@yahoo\\.com?(\\.uk)?$"))
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("ERROR: Couldn't Load in " + filePath);
e.printStackTrace();
} finally {
if (scanner != null)
scanner.close();
}
}
}
答案 0 :(得分:1)
您可以使用throws Exception
,但建议您尝试使用try / catch,因为您可以告诉您的程序在发生错误时该怎么做。是的,如果出现错误,必须有例外。
答案 1 :(得分:1)
我的经验法则是广泛使用异常捕获(捕获异常或Throwable),除非特定异常我想要做的具体事情。
例如,如果一个方法抛出两个不同的异常,并且我将处理两个异常,那么我将捕获异常。但如果我处理它们不同,那么我会单独捕捉它们并相应地处理它们。
这种方法的扳手是“RuntimeExceptions怎么样”。一种思想是允许RuntimeExceptions冒泡。但我发现在我捕捉异常的情况下,我想要所有这些......有时甚至是Throwables(我只是通过捕获Exception而不是Throwable来烧掉一次)。
以下是一些例子:
public void myMethod() throws IOException, FileNotFoundException ();
在我不想让Exceptions冒泡的情况下(需要全部处理)
try{
myMethod();
catch(Exception e) {
//handle it
}
在我捕获异常的情况下,需要为FileNotFound执行不同的操作。
try{
myMethod();
catch(FileNotFoundException fe){
//handle file not found
}
catch(Exception e) {
//handle it
}
在我让Exceptions冒出来的情况下,因为我知道链上有一些非常酷的异常处理代码正在处理它,我想避免多次记录异常:
myMethod();
在我让异常冒泡但除了FileNotFound之外的情况。
try{
myMethod();
catch(FileNotFoundException fe){
//handle file not found
}
答案 2 :(得分:0)
是的,我们必须始终抓住IO例外。由于IO与读取或写入文件有关,因此可能会因各种原因(输入路径错误,资源不可用,网络故障)而失败。
捕获异常后,我们应该始终记录异常。 在大项目中,这些异常日志有助于确定某些功能失败的实际原因。