这里已经讨论了很多关于获取资源的内容。 如果已经有解决方案 - 请指出我,因为我找不到。
我有一个使用多个 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 内容:
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/