1

我正在寻找一个 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 使用非常相似的格式来配置 appenders:

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

4 回答 4

1

你看过Apache commons-configuration吗?它们提供类似 xpath 的支持来查询此类属性文件,并且如果您决定更改格式,将进一步让您在 xml、ini 等之间来回迁移。

于 2012-07-05T16:09:16.783 回答
0

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

于 2012-11-10T19:30:57.793 回答
-1

有两种可能:

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

    for (Object o : properties.keySet()) {
        String key = (String) o;
        if (key.startsWith("launcher")) {
            ...
        } else if (key.startsWith("cec")) {
            ...
        } 
    }
    
于 2012-07-05T15:28:56.367 回答
-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.
于 2012-07-05T15:21:03.277 回答