10

是否有类似于 C++ 的 libconfig 的 Java 库,其中配置文件以类似 JSON 的格式存储,可以由人类编辑,然后从程序中读取?

我不想使用 Spring 或任何更大的框架。我正在寻找的是一个小型、快速、独立的库。我看了看java.util.Properties,但它似乎不支持分层/嵌套配置数据。

4

4 回答 4

20

我认为https://github.com/typesafehub/config正是您正在寻找的。该格式称为HOCON for Human-Optimized Config Object Notation ,它是JSON的超集。

HOCON 的例子

HOCON也是有效的JSON

{
    "foo" : {
        "bar" : 10,
        "baz" : 12
    }
}

HOCON 还支持标准属性格式,因此以下内容也是有效的:

foo.bar=10
foo.baz=12

我发现非常有用的功能之一是继承,它允许您对配置进行分层。例如,一个库将有一个reference.conf,而使用该库的应用程序将有一个application.conf. 中的设置application.conf将覆盖 中的默认设置reference.conf

加载配置的标准行为:

便捷方法 ConfigFactory.load() 加载以下内容(首先列出的优先级较高):

  • 系统属性 application.conf(类路径上具有此名称的所有资源)
  • application.json (类路径上具有此名称的所有资源)
  • application.properties(类路径上具有此名称的所有资源)
  • reference.conf(类路径上具有此名称的所有资源)
于 2012-11-27T01:28:06.340 回答
4

我找到了这个HOCON示例:

my.organization {
    project {
        name = "DeathStar"
        description = ${my.organization.project.name} "is a tool to take control over whole world. By world I mean couch, computer and fridge ;)"
    }
    team {
        members = [
            "Aneta"
            "Kamil"
            "Lukasz"
            "Marcin"
        ]
    }
}
my.organization.team.avgAge = 26

读取值:

val config = ConfigFactory.load()
config.getString("my.organization.project.name")  // => DeathStar
config.getString("my.organization.project.description") // => DeathStar is a tool to take control over whole world. By world I mean couch, computer and fridge ;)
config.getInt("my.organization.team.avgAge") // => 26
config.getStringList("my.organization.team.members") // => [Aneta, Kamil, Lukasz, Marcin]

参考marcinkubala.wordpress.com _

于 2014-04-16T09:16:00.697 回答
1

Apache Commons Configuration APIConstretto似乎有点流行并且支持多种格式(虽然没有提到 JSON)。我个人也从未尝试过,所以YMMV。

于 2012-01-24T18:53:21.280 回答
0

如果您正在寻找一个处理 JSON 文件的 Java 库:

http://www.json.org/java/index.html

查看主页上的其他工具:

http://json.org/

于 2012-01-24T18:48:14.383 回答