Java:获取主应用程序的资源路径而不是jar的资源路径

标签 java

这里已经讨论了很多关于获取资源的内容。 如果已经有解决方案 - 请指出我,因为我找不到。

我有一个使用多个 jar 的程序。 在其中一个 jar 中,我在 main/resources 文件夹下添加了一个属性文件。

我已将以下方法添加到 jar 项目中以便读取它:

public void loadAppPropertiesFile() {

    try {
        Properties prop = new Properties();
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        String resourcePath = this.getClass().getClassLoader().getResource("").getPath();
        InputStream stream = loader.getResourceAsStream(resourcePath +  "\\entities.properties");
        prop.load(stream);
        String default_ssl = prop.getProperty("default_ssl");
    }catch (Exception e){

    }
}

问题(?)是resourcePath给了我一个目标\测试类的路径,但在调用应用程序目录下,尽管加载代码存在于jar中!

这是 jar 内容:

enter image description here

jar通过maven依赖添加到主项目中。

如何克服这种状态并读取 jar 资源文件?

谢谢!

最佳答案

我建议使用用于加载类的类加载器,而不是上下文类加载器。

然后,您有两种选择来获取 jar 文件根部的资源:

  • 使用Class.getResourceAsStream,传入绝对路径(前导/)
  • 使用ClassLoader.getResourceAsStream,传入相对路径(仅“entities.properties”)

所以:

InputStream stream = getClass().getResourceAsStream("/entities.properties");
InputStream stream = getClass().getClassLoader().getResourceAsStream("entities.properties");

就我个人而言,我会使用第一个选项,因为它更简短且同样清晰。

关于Java:获取主应用程序的资源路径而不是jar的资源路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57471872/

相关文章:

java - 长时间关机时如何处理servlet请求

java - 如何使用打印格式在文本java周围制作框?

Java 日期格式

Java 路径分隔符

Java Spring 应用运行 DynamoDBEmbedded 进行集成测试?

java - 如何使用 bytebuddy 更改方法签名?

java - ConfigurationProperties 不绑定(bind)属性

java - 有没有办法让@PersistenceContext 变得灵活?

java - 我们如何才能知道与 documentEvent 中的文档关联的 JeditorPane

java - WebTarget 和线程安全