gpt4 book ai didi

java - 发生异常后如何关闭 BufferedReader?

转载 作者:行者123 更新时间:2023-12-02 04:50:24 24 4
gpt4 key购买 nike

以简单代码为例:

            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子句中,它迫使我再次抛出异常,显然这不是一个好的解决方案。

最佳答案

您可以按照当前关闭生产者(在finally block 中)的方式执行此操作(如果您不想重新启动,则添加一个try-catch -抛出IOException)就像

} finally {
if(producer != null){
producer.close();
}
if(dr != null) {
try {
dr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}

或者,您可以使用try-with-resources statement 关闭就像

try (FileInputStream fis = new FileInputStream("D:\\acc_cp.log");
BufferedReader dr = new BufferedReader(new InputStreamReader(fis));
LogProducer producer = new LogProducer()) {
// ...

关于java - 发生异常后如何关闭 BufferedReader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com