无法使用相对路径将文件从jar读入FileInputStream

时间:2018-03-20 09:21:41

标签: java properties relative-path fileinputstream

鉴于我能够加载 mail.properties 文件,例如:

ResourceBundle rb = ResourceBundle.getBundle("META-INF.mail");
System.out.prinltn("subject :" + rb.getString("email.subject")); //output : 'subject : Job Application'

然而我无法阅读;用同样的方法;我的 mail.properties 文件为FileInputStream。我尝试了所有这些选项,但没有一个工作,我总是得到FileNotFoundException

FileInputStream fis = new FileInputStream("META-INF/mail.properties");
FileInputStream fis = new FileInputStream("META-INF//mail.properties");
FileInputStream fis = new FileInputStream("META-INF\\mail.properties");

文件夹 META-INF 存在于构建时加载的jar中:

enter image description here

任何帮助都将得到更多的赞赏。

1 个答案:

答案 0 :(得分:1)

问题是FileInputStream()将查找相对于当前目录的路径。由于您的META-INF位于导入的jar中,因此无法找到它。

根据this post,您有以下选项:

  1. 指定绝对文件名
  2. 指定一个相对文件名,该文件名考虑了您运行此
  3. 的位置
  4. 将文件捆绑为资源,并使用Class.getResourceAsStream或类似的
  5. 查看更多详情。 我的问题是你是否可以使用ResourceBundle加载它,为什么要尝试以不同的方式重新加载它?