我有一个java应用程序“app”,它依赖于“dep.jar”。 “dep.jar”有一个配置文件 - “conf.properties”,它被复制并打包到dep.jar中。问题是在“app”运行期间,找不到“conf.properties”。
我应该如何指定“conf.properties”的路径(在“dep.jar”的代码中),以便在运行时找到它?
罗南。
更具体一点:我不需要文件作为InputStream,但我需要文件的路径。特别是我需要它来配置JMX:
HashMap<String, Object> env = new HashMap<String, Object>();
...
env.put("jmx.remote.x.password.file", "password.properties");
“password.properties”是运行时所需的配置文件。此代码位于jar文件中,而不是应用程序中。我把它放在资源中后,“password.properties”位于jar文件中,但是如何在运行时访问它?
答案 0 :(得分:2)
这取决于您尝试加载文件的方式。如果使用Class.getResourceAsStream()
,则路径相对于您调用getResourceAsStream()
的类。要访问“root”,请在文件名前添加"/"
:
InputStream in = Class.class.getResourceAsStream("/conf.properties");
[编辑]如果您需要文件的路径(即使它在JAR中),您可以使用返回URL的getResource()
。使用new File(url.toURI())
从网址获取路径。
答案 1 :(得分:0)
你在dep.jar中定义conf.properties在哪里?
如果项目是jar项目(没有声明的包装元素或&lt; packaging&gt; jar&lt; / packaging&gt;)
如果您的conf.properties在“dep”项目的src / main / resources文件夹中或下面定义,它将被输出到最终的jar。
例如,在
中定义的文件src/main/resources/config/conf.properties
将打包在jar中
config/conf.properties
假设你有一个com.foo.Bar类,你想通过以下方式访问它的属性文件:
InputStream stream = Bar.getClass().getResourceAsStream("conf.properties");
然后文件conf.properties将在文件夹下定义:
src/main/resources/com/foo/conf.properties
如果您想从罐子的根目录访问资源流,您可以按照Aaron的回答建议:
InputStream stream = Bar.getClass().getResourceAsStream("/conf.properties");
,资源将在
中定义src/main/resources/conf.properties