我最近开始使用Java。我试图找到一种易于理解的方式来指定应用程序的配置值。我希望能够创建基本配置文件,然后将其包含在派生配置文件中,该配置文件还允许覆盖基本文件中的值。

不确定java属性文件是否提供第二个功能。在Google上搜索后,我发现了apache commons configurationini4j,但是我不确定它们是否得到了积极维护,或者实际上有多少人在使用它们。

最佳答案

一个简单的选项是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文件没有更改)并且运行良好。我个人使用过两次,它们始终如期交付。



为了清楚起见,所有空/异常处理都未包含在示例中。

关于java - 读取Java中的配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22974109/

10-11 23:18
查看更多