Сообщение об исключении Files.newInputStream () менее подробное, чем для нового FileInputStream - PullRequest
0 голосов
/ 10 апреля 2019

Я загружаю файл свойств из InputStream и ловлю IOException, если происходит ошибка.К сожалению, я не получаю значимого сообщения об ошибке из исключения, просто абсолютный путь к файлу.Вот проблемный фрагмент кода:

final Path p = Paths.get("myfile.properties");
final Properties conf = new Properties();

try (final InputStream in = Files.newInputStream(p)) {
    conf.load(in);
} catch (final IOException e) {
    logger.warning("Failed to load config: " + e.getMessage());
}

Поэтому, когда myfile.properties не существует, я вхожу в блок catch, как и ожидалось.Но вывод похож на: Failed to load config: /home/user/myfile.properties.

Я был убежден, что IOException действительно несет в себе значимое сообщение, например file does not exist.

Одним из решений было бы явное перехватывание FileNotFoundException, но идти по этому пути означало бы перехват специализированного исключения для всего, что может пойти не так.

Есть ли способ извлечь содержательное сообщение об ошибке из класса IOException?

С другой стороны, я могу сделать следующее с FileInputStream:

final File file = new File("myfile.properties");
final Properties conf = new Properties();

try (final FileInputStream in = new FileInputStream(file)) {
    conf.load(in);
} catch (final IOException e) {
    logger.warning("Failed to load config: " + e.getMessage());
}

В этом случае, если файл не существует, вывод будет выглядеть следующим образом: Failed to load config: /hoome/user/myfile.properties (file or directory does not exist), что является достаточно значимым для меняи не так технически, как использование e.toString(), как предлагается в комментариях.

В чем причина того, что два сообщения об исключениях для Files.newInputStream() и new FileInputStream() различны?

...