如果发生错误,我会从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()
的两个异常消息不同的原因是什么?