为了账号安全,请及时绑定邮箱和手机立即绑定

在封闭类之外调用扫描仪对象时如何关闭它?

在封闭类之外调用扫描仪对象时如何关闭它?

郎朗坤 2021-12-30 16:15:34
假设我有一个抛出异常的自定义阅读器对象:public StationReader {    public StationReader(String inFile) throws FileNotFoundException {        Scanner scan = new Scanner(inFile);        while (scan.hasNextLine() {            // blah blah blah        }        // Finish scanning        scan.close();           }}我在另一个类 Tester 中调用 StationReader:public Tester {    public static void main(String[] args) {        try {            StationReader sReader = new StationReader("i_hate_csv.csv");        } catch (FileNotFoundException e) {            System.out.println("File not found arggghhhhhh");        } finally {            // HOW TO CLOSE SCANNER HERE??        }    }}现在让我们想象一下,在扫描这些行时,抛出了一个异常,因此scan.close()永远不会被调用。在这种情况下,如何关闭扫描仪对象?
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

在try-with-resources语句中编写读取过程,但不要捕获任何异常,只需将它们传递回调用者即可,例如......


public class CustomReader {


    public CustomReader(String inFile) throws FileNotFoundException {

        try (Scanner scan = new Scanner(inFile)) {

            while (scan.hasNextLine()) {

                // blah blah blah

            }

        }

    }

}

该try-with-resource语句会在代码存在try块时自动关闭资源


仅供参考:finally用于这个,但是当你有多个资源时,它变得凌乱。所有冰雹try-with-resources🎉


查看完整回答
反对 回复 2021-12-30
  • 1 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号