use*_*114 25 java location load properties
我有简单的java项目结构:
package com.abc:
a.java
b.java
c.properties
我在c.properties文件中配置了数据库配置参数.在a.java和b.java中,我使用以下命令加载属性文件:
Properties p = new Properties();
InputStream in = this.getClass().getResourceAsStream("c.properties");
p.load(in);
Run Code Online (Sandbox Code Playgroud)
这很好用.但主要问题是,一旦我通过导出此代码准备可执行jar,属性文件也会打包在jar文件中.如果其他人想要修改不同数据库配置的属性文件,他怎么能这样做?我是否必须将属性文件存储在本地计算机的某个固定位置.例如"c:/".然后将jar以及属性文件提供给其他人.然后他需要在C:/ location中复制属性文件?还有一个问题,我如何使这个位置通用的Windows和Linux机器?
Per*_*ion 29
处理此问题的典型方法是从嵌入式文件加载基本属性,并允许应用程序的用户指定包含替代的其他文件.一些伪代码:
Properties p = new Properties();
InputStream in = this.getClass().getResourceAsStream("c.properties");
p.load(in);
String externalFileName = System.getProperty("app.properties");
InputStream fin = new FileInputStream(new File(externalFileName));
p.load(fin);
Run Code Online (Sandbox Code Playgroud)
您的程序将被调用类似于:
java -jar app.jar -Dapp.properties="/path/to/custom/app.properties"
Run Code Online (Sandbox Code Playgroud)