处理catch块中的异常?

时间:2013-04-10 02:31:46

标签: java exception

这可能是一个愚蠢的问题,但我无法在其他任何地方找到答案。我有一个类将读取和写入文件进行保存。现在,我正在尝试处理可能出现的一些错误。我想知道的是,这是否是Java中的合法或通用做法:

try {
    in = new ObjectInputStream(new FileInputStream(fileName));
    score = (Score)in.readObject();
} catch() {
    ...
}

我遇到的问题是如果文件为空,则无法读取文件。该程序将崩溃,所以我想知道常见或常规的做法是从catch语句创建文件中的一些数据,然后再次尝试/捕获它。然后在第二次捕获我可以崩溃程序。

我想要这样做的原因是用户擦除文件中的数据。

如果这是合法的,这会是语法吗?

try {
    // try something here
} catch(//Exception here) {
    // Create a new file and try again.
    try {
        // try again
    } catch() {
        // Crash the program
    }
}

2 个答案:

答案 0 :(得分:1)

为什么不在尝试使用之前检查文件是否存在或是空的?

try {
    File file = new File( fileName);
    if( !file.exists() || file.length() == 0) { 
        // Create the file, initialize it with some default value
    }
    in = new ObjectInputStream(new FileInputStream( file));
    score = (Score)in.readObject();
} catch() {
    ...
}

请注意,存在一个小竞争条件,用户可以在检查文件存在之间删除文件,并在FileInputStream内实际使用该文件。

答案 1 :(得分:0)

在catch块中做这样的工作通常是不好的形式。如果要在失败时重试,请使用类似

的循环
int retryCount = 0;
boolean success = false;
while(!success && retryCount < 2) {
    retryCount++;
    try {
        ...
        success = true;
    } catch (Exception ex) {
        // log exception
    }
}