gpt4 book ai didi

java - 访问jar依赖的getResourceAsStream()

转载 作者:行者123 更新时间:2023-12-02 11:24:52 24 4
gpt4 key购买 nike

我有 2 个项目; A 和 B(都是 Maven 项目)。 A 打包为 jar 并作为依赖项添加到项目 B。两个项目的/resources 文件夹中都有一个 config.properties 文件。运行项目 B 时,项目 A 中的以下代码加载 B 的资源文件夹:

Properties configProps = new Properties();
try {
InputStream in = classInA.class.getResourceAsStream("/config.properties");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = br.readLine()) != null)
{
String values[] = line.split("=", 2);
configProps.setProperty(values[0], values[1]);
line = br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}

我在项目 B 的方法中获得了相同的代码块,并且可以正确访问 B 的 config.properties 文件。知道如何解决这个问题,或者也许您对如何在作为 jar 运行时以及在 IDE (Intellij) 中访问 jar 依赖项中的文件有更好的想法

编辑:包如下

  • com.nicky.projectA
  • com.nicky.projectB

由于项目 B 找到了 config.properties 文件,因此没有输出错误堆栈,但该文件位于 com.nicky.projectB/resources 中,而不是项目 A 的资源文件夹中。

编辑:更改其中一个属性的文件名似乎已经解决了问题。我假设它首先搜索父项目并默认为该属性文件,因为它们具有相同的名称。

最佳答案

getResourceAsStream("/config.properties") 在类路径的根目录中搜索 config.properties。

它不关心调用该方法的代码是在A.jar还是B.jar中,也不关心文件是在A.jar还是B.jar中。

它扫描类路径,并返回找到的第一个 config.properties 文件。如果类路径中 A.jar 位于 B.jar 之前,则将返回 A 的配置文件。如果类路径中 B.jar 位于 A.jar 之前,则将返回 B 的配置文件。

这个问题正是包存在的原因:避免名称冲突。 A 的配置文件不应该位于根目录。它应该与 A 的类位于同一包中(例如,com.mycompany.a)。 B 的配置文件应与 B 的类位于同一包中(例如,com.mycompany.b)。

一旦您以这种方式正确使用了包,就像您可能已经对类所做的那样,您将不再有名称冲突。

关于java - 访问jar依赖的getResourceAsStream(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com