在try子句中抛出异常

时间:2018-06-02 03:57:38

标签: java exception-handling

我正在做一个需要使用File I / O的项目。相关代码如下:

Scanner testscn = new Scanner(input).useDelimiter("\n");
    testscn.forEachRemaining((scan) -> {
        String[] line = scan.split("-");

        try {
            File img = new File(line[0]);
            if (!img.exists()) throw new FileNotFoundException();
            test.put(img, line[1].split(","));
        } catch (FileNotFoundException e) {
            logger.warn("File path " + line[0] + " could not be resolved. Skipping.");
        }
    });
    testscn.close();

抛出FileNotFoundException只是为了将我的执行放到另一条路径上是不好的做法?

1 个答案:

答案 0 :(得分:0)

你在做什么会“奏效”。但是,大多数Java程序员可能会同意这是使用异常来实现“正常”流控制的示例。这样编写起来比较简单:

Scanner testscn = new Scanner(input).useDelimiter("\n");
testscn.forEachRemaining((scan) -> {
    String[] line = scan.split("-");

    File img = new File(line[0]);
    if (img.exists()) {
        test.put(img, line[1].split(","));
    } else {
        logger.warn("File path " + line[0] + ": Skipping.");
    }
});
testscn.close();

这应该像这样重写,以避免潜在的资源泄漏:

try (Scanner testscn = new Scanner(input).useDelimiter("\n")) {
    testscn.forEachRemaining((scan) -> {
        String[] line = scan.split("-");

        File img = new File(line[0]);
        if (img.exists()) {
            test.put(img, line[1].split(","));
        } else {
            logger.warn("File path " + line[0] + ": Skipping.");
        }
    });
}