与新的FileInputStream

时间:2019-04-10 17:30:46

标签: java exception nio

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

0 个答案:

没有答案