从Java中的classpath读取配置文件,默认为JAR

时间:2014-02-06 18:14:51

标签: java properties classloader properties-file

更新:事实证明,在我进行的一些测试中,类路径没有在IDE中正确设置。下面的代码段工作正常。这不再是一个问题。

我正在尝试在将部署在JAR中的文本文件中设置一些属性/配置。

我希望用户能够提供自己的属性/配置文件,这些文件将覆盖JAR中使用的文件,因此只有在用户提供的文件不存在时才会使用JAR中的文件。

我正在使用Class.getResource(path),它应该能够找到相对和绝对(带有前导斜杠)文件。

在JAR中给出以下文件层次结构:

<jar-file>/SomeClass.class
<jar-file>/conf/config-file.txt

的可选文件
<some-classpath-folder>/conf/config-file.txt

我正在尝试执行类似下面的代码段,以便只有在类路径的绝对文件夹conf中找不到该文件时,它才会从JAR内的相对conf文件夹中加载:

Class clasz = SomeClass.class;
res = clasz.getResource("/conf/config-file.txt");    // absolute file not found, note leading-slash

if (res == null)
    res = clasz.getResource("conf/config-file.txt"); // relative file is found, No leading-slash

找到相关文件(来自JAR内),但类路径中的绝对文件不是。

调用System.getProperty(“java.class.path”)显示&lt; some-classpath-folder&gt;文件夹,所以看起来类路径设置正确,但找不到&lt; some-classpath-folder&gt; /conf/config-file.txt中的文件。

有没有办法知道在搜索文件时扫描了哪些文件夹?或者对这里出了什么问题的任何建议?

TIA

1 个答案:

答案 0 :(得分:1)

如果您完全依赖类路径资源,则可以使用类路径层次结构,程序运行方式等。可能可以工作,但它并不完全在您的控制之内。

IMO最好检查明确定义的路径,例如,通过系统属性(如-Dconfig=/path/to/config),已知位置(如用户家中的文件)或属性API。