Java getResourceAsStream无法加载资源

时间:2012-10-01 00:06:29

标签: resources classpath loading

我正在尝试加载一个名称在属性文件中指定的类。这是相同的代码。

try {
    Properties properties = new Properties();   
    InputStream in = MyAbstractFactory.class.getResourceAsStream("/some.properties");
    properties.load(in);
    String impl = properties.getProperty("key");
    MyAbstractFactory factories = (MyAbstractFactory) Class.forName( impl ).newInstance();
    return factories;
} catch (Exception e) {
    return new DefaultFactoriesImpl();
}

此代码是jar文件的一部分。属性文件就在jar之外。它无法加载属性文件,而是加载DefaultFactoriesImpl。我知道当MyAbstractFactory.class.getResourceAsStream无法在类路径中找到资源时会发生这种情况,但这似乎不是这种情况。

目录结构: -

  • 玉米
  • myjar.jar
  • some.properties

我正在执行的命令是“java -jar myjar.jar”

有关为何可能发生这种情况的任何反馈。这可能与Clasloaders有关吗?我想补充一点,当我从eclipse中运行这段代码时,似乎可以选择some.properties。

1 个答案:

答案 0 :(得分:0)

从传递给getResourceAsStream()的参数中删除前导斜杠。

执行JAR时,将JAR外部的文件夹放入CLASSPATH。我不知道清单CLASSPATH是否会覆盖您可能使用-cp传递的清单。玩它;其中一个会奏效。

找不到你的.properties文件,因为它不在JVM CLASSPATH中。当你正确地执行它时,JVM将找到它。