0

我有一个属性文件,已包含在我将分发的 jar 中。在我决定将文件包含在 jar 中之前,我正在加载它

properties.load(new FileInputStream(configFileName));

但是,一旦将文件放入 jar 中,这就会停止工作,所以我将代码更改为

properties.load(MyClass.class.getResourceAsStream(configFileName));

唯一的问题是我有使用我的属性的单元测试(它们是静态加载的,所以我不能模拟它)。单元测试在制作 jar 之前运行,因此它们现在都失败了。只有当程序作为 jar 运行时,是否有一种优雅的方法来处理将在 jar 中的文件?

4

3 回答 3

1

一种方法是调用getResourceAsStream(),如果它返回 null,则调用new FileInputStream()

但更好的问题是:为什么运行单元测试时类路径中没有属性?如果您使用的是像 Maven 这样的构建工具,那么这应该是自动的。这会让你更好地理解你实际上是在构建你认为的自己。

于 2012-08-31T16:59:58.970 回答
0

如果您乐于将属性文件与源代码一起使用,请尝试:

properties.load(getClass().getResourceAsStream("my.properties"));

在这种情况下,该my.properties文件必须与该文件位于同一包中.java

于 2012-08-31T17:07:12.953 回答
0

问题可能是你的类加载器看不到这个文件..

我会用这个

Classloader cl = getClass().getClassloader();
properties.load(cl.getResourceAsStream(configFileName))

如果此应用程序是 Web 应用程序,请注意您的类加载。在这种情况下,您将有许多类加载器。您的资源必须对这个类加载器可见。在像 tomcat 这样的 servlet 容器中,它们以这种方式工作

  Bootstrap
      |
   System
      |
   Common
    /     \
Webapp1   Webapp2 ... 

你可以在这里阅读更多 http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html

于 2012-09-01T15:44:38.997 回答