需要捕获IOExceptions&例外

时间:2015-03-16 18:11:02

标签: java exception java.util.scanner ioexception

如果使用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();
        }
    }
}

3 个答案:

答案 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与读取或写入文件有关,因此可能会因各种原因(输入路径错误,资源不可用,网络故障)而失败。

捕获异常后,我们应该始终记录异常。 在大项目中,这些异常日志有助于确定某些功能失败的实际原因

相关问题