只是認爲當我打開我的文件,然後當我想寫入一些東西時,會拋出一個異常,並且如果我在try塊中使用file.close(),那麼由於該異常將不起作用, 我應該在哪裏關閉我的文件?如何在特殊情況下關閉文件?
回答
正確的方法,這樣做是:
FileOutputStream out = null;
try {
out = ...
...
out.write(...);
...
out.flush();
} catch (IOException ioe) {
...
} finally {
if(out!=null) {
try {
out.close();
} catch (IOException ioe) {
...
}
}
}
你應該使用finally塊。但是close方法也會拋出一個IOException異常,所以你應該把它包含在一個try-catch塊中。
This link may be helpful。
有近拋出IOException是一個不好的設計決定我意見 – butterchicken 2009-07-02 06:56:45
使用finally塊:
File f;
try {
f = ....
.. use f ...
} /* optional catches */
finally {
if (f != null) f.close();
}
我用兩個嘗試catch塊。
一個我打開文件+一個布爾讓我知道該文件已成功打開。 第二個我寫東西的地方(檢查布爾如果打開是成功的)。
Try
{
//Open file. If success.
bSuccess = true.
}
catch
{
}
try
{
//check bool
If(bSuccess)
{
//Do write operation
}
}
catch
{
}
finally
{
if(bSuccess)
{
File.close();
}
}
我喜歡mfx的建議 – 2009-07-02 06:58:22
大衛拉比諾維茨的答案是正確的,但它可以得到與使用Apache Commons IO簡單。對於finally子句中複雜的try-block,它有一個方法,用於在沒有異常的情況下關閉任何Stream。有了這個,你可以這樣寫:
FileOutputStream out = null;
try {
out = ...
...
out.write(...);
...
out.flush();
} catch (IOException ioe) {
...
} finally {
if(out!=null) {
org.apache.commons.io.IOUtils.closeQuietly(out);
}
}
爲什麼downvote? – Mnementh 2009-07-02 10:15:35
資源的一般模式是acquire; try { use; } finally { release; }
。如果您嘗試重新排列,那麼您通常會在您未釋放鎖的情況下結束鎖定。請注意,通常不需要使用空檢查混亂。如果您需要從中獲得例外,請使用try-catch
環繞所有代碼。所以
try {
final InputStream in = new FileInputStream(file);
try {
...
} finally {
in.close();
}
} catch (IOException exc) {
throw new SomeException(exc);
}
- 1. 如何在特殊情況下
- 2. 如何在不關閉文件的情況下覆蓋文件
- 3. 你如何處理特殊情況下
- 4. 使用開關的情況下在蟒蛇有特殊條件
- 5. 如何在這種特殊情況下點擊jquery事件?
- 6. 如何在不關閉主程序的情況下關閉jframe
- 7. 如何在不關閉tkinter的情況下關閉pygames?
- 8. re.split()特殊情況
- 9. NSLocalizedString特殊情況
- 10. 如何在特殊情況下在Excel中替換字符
- 11. 如何添加特殊字符的文件名在這種情況下
- 12. 特殊情況下一列的總和
- 13. Postgres的:如何防止INSERT在特殊情況下
- 14. 在這種特殊情況下,如何工作?
- 15. removeEventListener,如何做到這一點在特殊情況下
- 16. str_replace - 如何處理特殊情況?
- 17. python如何處理特殊情況?
- 18. crontab中的%特殊情況如何?
- 19. 特殊情況下插入排序的最壞情況比較
- 20. 如何在沒有初始化的情況下在fancybox3中關閉後關閉?
- 21. 如何在不使用git clone的情況下關閉Heroku的文件?
- 22. 如何判斷QFileDialog是否在未選擇文件的情況下關閉?
- 23. 如何在沒有關閉連接的情況下獲取Bak文件或MDF?
- 24. 通過特殊情況
- 25. 特殊情況對矯正
- 26. 如何在不關閉投影機的情況下全屏關閉視頻
- 27. 如何在不關閉整個程序的情況下關閉窗口?
- 28. 如何在不關閉標籤的情況下關閉UI5應用程序
- 29. 如何摺疊特殊情況下的構造函數?
- 30. 如何在不返回index.html的情況下關閉警報?
,當我在寫file.close()finally塊,它將顯示創建一個名爲文件中的局部變量的錯誤。:( – Johanna 2009-07-02 06:48:58