[英]How can I close a BufferedReader after an exception happed?
以一個簡單的代碼為例:
FileInputStream fis = null;
BufferedReader dr = null;
try{
fis = new FileInputStream("D:\\acc_cp.log");
dr = new BufferedReader(new InputStreamReader(fis));
producer = new LogProducer(); // it may throw an exception
String line = "";
while((line = dr.readLine())!= null ){ // readline may throw an exception too
producer.send("test", line);
Thread.sleep(50);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(producer != null){
producer.close();
}
}
兩個producer = new LogProducer();
和(line = dr.readLine())
可能會引發異常。 所以,我的問題是,如果producer = new LogProducer();
拋出異常,我想正確關閉BufferedReader,什么是合適的方法? 如果我將dr.close()
放在catch子句或finally子句中,它將迫使我再次引發異常,顯然這不是一個好的解決方案。
您可以使用當前關閉producer
(在finally
塊中)的方式進行操作(如果不想重新拋出IOException
,則添加try-catch),例如
} finally {
if(producer != null){
producer.close();
}
if(dr != null) {
try {
dr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
或者,你可以使用try-with-resources
的語句來close
狀
try (FileInputStream fis = new FileInputStream("D:\\acc_cp.log");
BufferedReader dr = new BufferedReader(new InputStreamReader(fis));
LogProducer producer = new LogProducer()) {
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.