调用自定义异常类

时间:2015-11-19 22:49:42

标签: java exception

我目前正在尝试在BlueJ完成一个项目。我有ReadWrite班和InvalidFileException班。

我希望将toString()类中的InvalidFileException方法调用ReadWrite方法中的writeToFile()类。

readWrite只能处理以.txt结尾的文件。一旦布尔值完成并找到一个不以.txt结尾的文件,它应该返回我的自定义异常类。

如果文件类型存在,writeToFile方法检查布尔值;如果没有,它应该返回我创建的InvalidFileException

我相信我需要在else语句之后调用它,但我没有运气搞清楚。

这是我的代码。

ReadWrite类:

public boolean writeToFile() {
    boolean ok;

    try {
        FileWriter writer = new FileWriter(file);
        {
            if (file.toLowerCase().endsWith(".txt")) {
                ok = true;
                write();
            } else {
                ok = false;

            }
        }

    } catch (IOException e) {
        ok = false;
    }
}

InvalidFileExceptionClass *****

import java.io.FileNotFoundException;

public class InvalidFileException extends Exception {

    /**
     * Constructor for objects of class InvalidFileException
     */
    public InvalidFileException(String message) {
        super(message);
    }

    public String toString() {
        return ("Sorry but this system only accepts .txt files");
    }
}

2 个答案:

答案 0 :(得分:3)

这里有几个问题。

首先,你不要“召唤”一个例外;你抛出一个。使用throw关键字可轻松完成此操作。布尔值在这里完全无关紧要。

接下来,您的自定义异常会扩展Exception,这意味着它已经过检查。你要么必须亲自抓住它,要么宣布它被扔掉。你不想在这里抓住它,但是你希望调用者来处理它。使用throws关键字也可以轻松完成。

最后,你不想完全覆盖toString,完全忽略你传递的信息。除了你的信息之外,加入提供的信息是一个更好的设计,但是我把这个决定留给了你。

这可能看起来像这样:

public boolean writeToFile() throws InvalidFileException {
    try {
        FileWriter writer = new FileWriter(file);
        if (file.toLowerCase().endsWith(".txt")) {
            write();
        } else {
            throw new InvalidFileException("this message is completely ignored");
        }
    } catch (IOException e) {
        throw e; // something bad has happened and the exception should propagate
    }
}

无论调用什么,这种方法都必须将其包装在自己的try...catch

try {
    readWriteInstance.writeToFile();
} catch (InvalidFileException e) {
    System.out.println(e.toString());
}

答案 1 :(得分:1)

当您检测到错误时,需要调用throw new InvalidFileException(),然后捕获该异常。扔掉之后立即捕捉它是没有意义的,你也可以在那里打印错误字符串。您应该在writeToFile方法之外捕获它,这允许您在调用writeToFile的方法中处理异常。