java中的groovy的ConfigSlurper是否有一个等价的类?

时间:2014-08-04 12:29:10

标签: java groovy configuration

下面是一个我通常在groovy中使用的小例子,但我想在java中使用类似的东西。

配置文件

datastore{
    oracle{
        host="localhost"
        port=1521
        dbname="orcl"
    }
    db2{
        host="localhost"
        port=12807
        dbname="sppd"
    }
}

Groovy的

public class Configuration {

    public static final def cfg = new ConfigSlurper().parse(new File("configuration").toURL())

    static main(args) {
        println cfg.datastore.oracle.host
        println cfg.datastore.db2.host
    }

}

2 个答案:

答案 0 :(得分:1)

我猜你想通过它的完整路径访问一个属性,例如来自Java的datastore.oracle.host就像在Groovy中一样。如果是这样,请执行以下操作:

ConfigObject config = new ConfigSlurper().parse(new File("configuration").toURL());
Map flattenedConfig = config.flatten();
String oracleHost = (String) flattenedConfig.get("datastore.oracle.host");

比Java属性更好,因为维护了类型。来自Groovy User list post

答案 1 :(得分:0)

这是太多的动态groovyness,但可以用XML,属性等表示。您可以尝试Common Configuration,它将表达相同的数据:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<gui-definition>
  <colors>
    <background>#808080</background>
    <text>#000000</text>
    <header>#008000</header>
    <link normal="#000080" visited="#800080"/>
    <default>${colors.header}</default>
  </colors>
</gui-definition>

阅读:

XMLConfiguration config = new XMLConfiguration("tables.xml");
String backColor = config.getString("colors.background");
String textColor = config.getString("colors.text");
String linkNormal = config.getString("colors.link[@normal]");

您还可以尝试PropertyConfiguration

# Properties definining the GUI
colors.background = #FFFFFF
colors.foreground = #000080

window.width = 500
window.height = 300

加载:

Configuration config = new PropertiesConfiguration("usergui.properties");
String backColor = config.getString("colors.background");