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

可执行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

却不行!


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

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

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

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

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


自己做命令行参数不就行了吗?解析main方法的args.


其实直接用配置文件的相对路径就可以了。 比如这样载入配置:

  Properties properties = new Properties();
  File file = new File("something.properties");
  FileInputStream fis = new FileInputStream(file);
  properties.load(fis);
  fis.close();

然后可以用properties.getProperty(key)来获取某个属性。 用properties.setProperty(key, value)来设置属性。

这样只要something.properties和你生成的jar在同一个目录下,就能成功读取。

【热门文章】
【热门文章】