可执行jar怎么读取外部配置文件


现在打了个可执行的jar包,
通过 java -jar something.jar执行,
目前配置文件(如something.properties)放在jar包里了,
现在我想把配置文件放在jar包外面,
这样方便修改!
but how?!

我是通过:

Something.class.getResourceAsStream("/something.properties");

来获取配置文件的输入流的。

另:
在其他类中调用那个jar包里的Main-Class的main方法是可以读取jar包外的配置文件的,
但是执行:

java -jar something.jar

却不行!

java 配置文件 jar

二号楼斜对门 10 years, 8 months ago

现象是无法读取配置文件。原因:

Something.class.getResourceAsStream("/something.properties");

首先java.lang.Class#getResourceAsStream()方法加载文件,其实是委托ClassLoader加载的,而ClassLoader在加载文件时是根据相对路径(相对于当前java进程的根目录)加载。
所以不妨打印一下加载的路径:

URL url = Something.class.getResource("/something.properties");
System.out.println(url);

看看在两次不同执行方式下,这个url还是否一致就知道了。

神经病幽幽子 answered 10 years, 8 months ago

Your Answer