【问题标题】:Unable to read a file from a jar into a FileInputStream using a relative path无法使用相对路径将 jar 中的文件读入 FileInputStream
【发布时间】:2023-03-09 14:49:01
【问题描述】:

鉴于我能够加载我的 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 中:

任何帮助将不胜感激。

【问题讨论】:

  • 你能分享你的目录结构吗? Meta-INF 目录到底在哪里?
  • 也分享System.out.println(new File(".").getAbsolutePath());的输出,把这一行放在抛出异常的那一行之前。
  • @catchUp : 我已按要求添加了目录结构。

标签: java properties relative-path fileinputstream


【解决方案1】:

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

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

  1. 指定绝对文件名
  2. 指定一个相对文件名,考虑到你在哪里运行它
  3. 将文件捆绑为资源并使用Class.getResourceAsStream 或类似名称

查看更多详情。 我的问题是,如果您能够使用 ResourceBundle 加载它,您为什么要尝试以不同的方式重新加载它?

【讨论】:

  • 感谢您的反馈。回答你的问题:它与这个问题有关:stackoverflow.com/questions/49366941/… 我想确保我正在阅读正确的 mail.properties 文件。为此,我想将整个 mail.properties 文件打印到控制台或将其复制/粘贴到其他文件夹中。
  • 然后尝试使用绝对文件路径。要获取 jar 内的绝对路径,请参阅此答案:stackoverflow.com/a/14612564/2458858
猜你喜欢
  • 2019-05-16
  • 2011-06-30
  • 2013-11-09
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
相关资源
最近更新 更多