繁体   English   中英

在catch块中处理异常?

[英]Handling exceptions in the catch block?

这可能是一个愚蠢的问题,但我在其他任何地方都找不到答案。 我有一个可以读取和写入文件以进行保存的类。 现在,我正在尝试处理一些可能会出现的错误。 我想知道的是这是合法的还是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
    }
}

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

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实际使用它之间,用户可以删除该文件。

在catch块中进行这样的工作通常是不好的形式。 如果您想重试失败,请使用类似以下的循环

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM