Я загружаю файл свойств из 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()
различны?