我有一个属性文件,我已经包含在我将要分发的jar中。在我决定将文件包含在jar中之前,我正在加载它像
properties.load(new FileInputStream(configFileName));
但是一旦将文件放入jar中,这就停止了工作,所以我将代码更改为
properties.load(MyClass.class.getResourceAsStream(configFileName));
唯一的问题是我有使用我的属性的单元测试(静态加载,所以我无法模拟它)。在制作罐子之前运行单元测试,所以它们现在都失败了。有没有一种优雅的方法来处理只在程序作为jar运行时才会在jar中的文件?
答案 0 :(得分:1)
执行此操作的一种方法是调用getResourceAsStream()
,如果它返回null call new FileInputStream()
。
但更好的问题是:运行单元测试时,为什么不在类路径中的属性?如果您正在使用像Maven这样的构建工具,那么这应该是自动的。而且它会更好地表明你实际上在构建你认为自己的东西。
答案 1 :(得分:0)
如果您乐意将属性文件与源代码一起使用,请尝试:
properties.load(getClass().getResourceAsStream("my.properties"));
在这种情况下,my.properties
文件必须与.java
文件位于同一个包中。
答案 2 :(得分:0)
问题可能是你的类加载器看不到这个文件..
我会用这个
Classloader cl = getClass().getClassloader();
properties.load(cl.getResourceAsStream(configFileName))
如果这个应用程序是一个webapplication,请注意你的类加载..在这种情况下你会有很多类加载器..你的资源必须对这个类加载器可见.. 在像tomcat这样的servlet容器中,它们以这种方式工作
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
你可以在这里阅读更多内容 http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html