用于“索引”属性文件的Java API

时间:2012-07-05 15:18:00

标签: java api properties

我正在寻找一个允许以下列格式写入和读取属性文件的Java API:

<prefix>.<index>.<suffix>=<value>

例如:

launcher.1.id=23
launcher.1.name=abc
launcher.1.date=123123
launcher.2.id=sdfsdf
launcher.2.name=Asdfdsf
launcher.2.date=ghfgh
cec.1.id=sdfsdf
cec.1.name=Asdfdsf
cec.1.date=ghfgh
cec.2.id=sdfsdf
cec.2.name=Asdfdsf
cec.2.date=ghfgh
#...

log4j使用非常相似的格式来配置appender:

log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p 
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

任何人都知道是否有像这样的案例的Java库?

谢谢, 伊利亚安德

4 个答案:

答案 0 :(得分:1)

你有没有看过Apache commons-configuration?它们提供类似xpath的支持来查询这些属性文件,并且如果您决定更改格式,还可以让您在xml,ini等之间来回迁移。

答案 1 :(得分:0)

正确的解决方案是重新考虑格式并使用JSON。谢谢@ControlAltDel的想法。

答案 2 :(得分:-1)

有两种可能性:

  1. 您添加了一个属性,用于定义存在多少个编号项目 - 例如launcher.count = 2
  2. 您枚举所有键并寻找合适的模式:

    for (Object o : properties.keySet()) {
        String key = (String) o;
        if (key.startsWith("launcher")) {
            ...
        } else if (key.startsWith("cec")) {
            ...
        } 
    }
    

答案 3 :(得分:-2)

java.util.Properties

String string = properties.getProperty("launcher.1.name");
properties.setProperty("launcher.1.name", "abc");

如果您需要枚举中的所有属性,

public Enumeration<?> propertyNames()

Returns an enumeration of all the keys in this property list, 
including distinct keys in the default property list if a key of 
the same name has not already been found from the main properties list.