Создание исключения в предложении try - PullRequest
0 голосов
/ 02 июня 2018

Я делаю проект, который требует использования файлового ввода-вывода.Соответствующий код выглядит следующим образом:

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 голосов
/ 02 июня 2018

То, что вы делаете, будет «работать».Однако большинство программистов на 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.");
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...