![](/img/trans.png)
[英]do I need to surround fileInputStream.close with a try/catch/finally block? How is it done?
[英]eclipse asks me to surround with try/catch in finally block - possible to disable it?
在我的一個Java應用程序代碼中,我有一個try-catch-finally
塊,其中try
塊創建了一些輸入和輸出流,如果出現問題,我finally
關閉所有先前打開的流。
finally
{
if(inputStream != null)
inputStream.close();
if(outputStream != null)
outputStream.close();
}
但是Eclipse中的<stream>.close()
行在此行的代碼中顯示錯誤“未處理的異常IOException”,並顯示解決方案是在finally
塊中包含另一個try/catch
,這看起來很糟糕編程實踐,我不想在finally塊中。
我的問題是:是否可以在Eclipse中刪除此錯誤並僅在需要時使用try/catch
而不是eclipse告訴我執行try/catch
添加。 (因為我已經嘗試通過用if/else
替換try/catch
來避免異常)。
這不是Eclipse錯誤, 它是Java編譯器錯誤 。 Eclipse只是為您報告Java編譯錯誤。 由於代碼在沒有 try / catch子句的情況下無法編譯 ,因此無法 “關閉”。 它是Java中的一個安全功能,它會強制您處理通常拋出的異常。
方法在簽名中有例外。 例如, InputStream.close()拋出IOException,強制您在try / catch塊中處理它。
public void close() throws IOException {
...
拋出異常是告訴程序一個重要問題 - 必須處理 - 的一種方式。
我的問題是:是否有可能在eclipse中刪除此錯誤並在需要時使用try / catch而不是eclipse告訴我做try / catch add。
不,這是不可能的。
(因為我已經嘗試通過用if / else替換try / catch來避免異常)。
您通常不應嘗試使用if/else
塊替換try/catch
塊。 它們是具有不同目的的兩個不同特征。
例外是Java必不可少的功能。 閱讀並了解它。
正確地應該這樣做以確保我們嘗試關閉兩個流。
finally
{
try {
if(inputStream != null)
inputStream.close();
}
catch(Exception e)
{ /* Ignore */ }
try {
if(outputStream != null)
outputStream.close();
}
catch(Exception e)
{ /* Ignore */ }
}
如果您不關心處理異常,請查看Apache commons io庫。
org.apache.commons.io.IOUtils.closeQuietly(inputstream)
適用於輸出流,作者和讀者。
IOException
不是您可以避免的,因為它可能由於您無法控制的情況而發生。 (網絡連接斷開,硬盤錯誤等)。 Eclipse完全正確, inputStream.close()
和outputStream.close()
本身可能會拋出異常,你必須准備以某種方式處理它。 沒有辦法沉默這個錯誤,因為它不是Eclipse的挑剔; 您的代碼不是有效的Java代碼。
您可以聲明您的函數throws IOException
並將異常的處理委托給調用者,或者您必須咬住子彈並自己處理(並可能忽略) IOException
。 我認為在Apache Commons的IOUtils
庫中有一個實用程序函數,它封裝了這個邏輯,這將使你的代碼更清晰(並隱藏你默默忽略IOException
的事實)。
但是eclipse中的.close()行顯示錯誤,該行代碼中的Unhandled異常IOException,並顯示解決方案包含finally塊中的另一個try / catch,這對編程實踐來說是不好的,我不想在finally塊中。
close方法也可以拋出IOExceptions,因此你必須在finally塊中包含嵌套的try / catch子句,這是一個不幸的情況。
但是你真的無能為力。 你需要那些(丑陋的)finally塊來正確處理異常。
eclipse沒有任何問題。它只是表明你的代碼中有一個編譯錯誤 。你不能用if-esle替換try-catch,這里需要try catch。你需要這個try catch not因為輸入流可能為null你試試,否則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.