我最近开始使用 Java。我试图找到一种以易于阅读的方式指定我的应用程序配置值的好方法。我希望能够创建一个基本配置文件,然后包含在派生的配置文件中,该文件还允许覆盖基本文件中的值。
不确定 java 属性文件是否提供第二个功能。在谷歌上搜索后,我发现了apache commons 配置和ini4j,但我不确定它们是否得到积极维护,或者有多少人实际使用它们。
我最近开始使用 Java。我试图找到一种以易于阅读的方式指定我的应用程序配置值的好方法。我希望能够创建一个基本配置文件,然后包含在派生的配置文件中,该文件还允许覆盖基本文件中的值。
不确定 java 属性文件是否提供第二个功能。在谷歌上搜索后,我发现了apache commons 配置和ini4j,但我不确定它们是否得到积极维护,或者有多少人实际使用它们。
一个简单的选项是java.util.Properties
,它不仅支持从key=value
XML 文件加载配置数据,还直接支持您描述的分层默认值。
例如:
Properties base = new Properties();
base.load(new FileReader("base.cfg"));
Properties custom = new Properties(base);
custom.load(new FileReader("custom.cfg"));
// 'custom' defers to 'base' for properties that were not in "custom.cfg".
// custom.remove(key) can be used to restore a default from 'base'.
请注意,Properties
它没有对分组/分层属性的内置支持(例如,XML 树或带有部分的 INI 文件),但通常可以在许多情况下完成工作。
也可以在自定义配置之后加载基本配置,例如,如果自定义配置包含一个指定基本文件名的属性(考虑到您在下面的一些评论,这可能很有用):
Properties base = new Properties();
Properties custom = new Properties(base);
custom.load(new FileReader("custom.cfg"));
base.load(new FileReader(custom.getProperty("basefile")));
顺便说一句,您提到的两个库(Apache Commons Configuration 和 ini4j)都处于良好的工作状态。Apache 库支持更广泛的格式并且得到更积极的维护,但是 ini4j 已经成熟(已经存在了大约 10 年,INI 文件没有改变)并且运行良好。我个人已经多次使用这两种方法,它们总是按承诺交付。
为了清楚起见,示例中省略了所有空/异常处理。