2016-12-05 122 views
0

所以我需要添加一个新的方法到一个程序,它需要我访问这个zip文件夹。第一种方法从网站下载并返回一个File对象。创建一个ZipFile,需要初始化,但初始化需要处理异常

所以现在在我的方法中,我想要将其更改为ZipFile对象。在那一刻,我只想进入文件,使用该文件创建一个ZipFile对象,然后返回它。

所以一切都很好,但是当我创建ZipFile对象时,它说未处理的IOException在那里。但是,如果我把try/catch放在它上面,我不能返回ZipFile。所以我先创建它然后做try catch,但告诉我ZipFile没有初始化。有什么想法可以解释我在这里想的是什么,或者我可以如何分类?

我的代码看起来像;

ZipFile zipTestData; 

try { 
    zipTestData = new ZipFile(testData) 
}catch (IOException io) 
    log.debug(io.toString()); 
}catch(Exception e) { 
    log.debug(e.toString()); 
} 

return zipTestData; 
+0

共享异常堆栈跟踪 – sidgate

回答

2

你不应该“吞下”一个异常。如果发生异常,您可能应该将其传递给调用者处理。否则,主叫方会如何知道操作失败?

您也可以使用您所描述的方法,如果主叫方准备正确处理结果,像这样:

ZipFile zipTestData = null; 

try { 
     zipTestData = new ZipFile(testData) 
} catch (IOException io) 
    log.debug(io.toString()); 
} catch(Exception e) { 
    log.debug(e.toString()); 
} 

return zipTestData; 

这将返回null给调用者,而不是一个ZipFile,如果拉链不能创造出于任何原因。

虽然,在特定情况下,你也可以同样写

try { 
     return new ZipFile(testData) 
} catch (IOException io) 
    log.debug(io.toString()); 
} catch(Exception e) { 
    log.debug(e.toString()); 
} 

return null; 

的理由让你得到的错误是当地变量通过在声明默认初始化。所以当你声明一个局部变量(ZipFile zipTestData;)时,它没有被分配任何值。然后,如果在运行时抛出异常new ZipFile(testData),变量将不会被分配,而return将尝试返回该未分配的变量的值。在Java中,这是被禁止的。

1

可能你应该初始化为 ZipFile zipTestData = null; 没有stacktrace这是我能想出的