如何从可执行jar中读取本地属性文件?

时间:2013-09-17 20:48:45

标签: java eclipse executable-jar

我在Eclipse Indigo上开发并测试了我的程序。运行时找到属性文件没问题。 我使用Eclipse导出创建了一个可运行的jar。 从jar运行程序时,程序找不到属性文件。 属性文件不在jar中,它位于部署jar的目录的子目录中。 如上所述,此目录位于Eclipse运行配置的类路径中。

  

C:/myApp/myApp.jar C:/myApp/properties/myApp.properties

props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myApp.properties"));

我是否只需要编辑Jar清单以将config目录放在类路径上?

2 个答案:

答案 0 :(得分:0)

properties.load(this.getClass().getResourceAsStream(configFileSrc));

这应该有效。

就我而言,configFileSrc =“/ apiconfig /appconfig.properties”

enter image description here

我必须在构建路径中添加 staticresources 目录。

由于

答案 1 :(得分:0)

是。确保指定config目录相对于jar所在目录的路径。既然你上面说过config目录是jar位置的子目录,那么这可能只是

<configDir>

其中<configDir>是您的配置目录名称。

您还需要使用绝对资源名称进行查找,方法是在属性文件名中添加斜杠:

props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("/myApp.properties"));

这是因为您指定的相对名称将附加到该类的包路径,这是您不想要的。

您是否需要使用contextClassLoader?更简单的调用是使用包含查找的类的classLoader。而且,由于课程可以委托给它的classLoader,你可以简单地说:

props.load(getClass().getResourceAsStream("/myApp.properties"));

最后 - 您是否考虑过将属性文件放在jar中?如果它根本不会改变,这将是一个更好的选择。在这种情况下,您不需要指定classPath。请注意,如果需要,可以将其放在jar 中的子目录中,但是您必须更改所查找的资源路径,并再次使用绝对资源名称

以下是有关绝对和相对资源名称的一些信息:

http://docs.oracle.com/javase/1.5.0/docs/guide/lang/resources.html

希望这有帮助!