我想在Apache Commons Configuration中使用备用列表定界符。但是,尽管尝试了许多其他方法来访问Configuration对象并设置其列表定界符,但我无法让它实际使用除默认逗号定界符之外的任何东西。

我在Mac OS X上将Commons Configuration版本1.8.0与Java 1.6.0_29一起使用。

编辑:

我需要加载一个XML配置定义文件,该文件将建立四层配置源集:

  <configuration>
      <system/>
      <properties fileName="top.properties"/>
      <properties fileName="bop.properties"/>
      <properties fileName="fop.properties"/>
  </configuration>


...我提供给DefaultConfigurationBuilder构造函数:

  val configBuilder = new DefaultConfigurationBuilder(configURL)


我已经在结果getConfiguration上尝试了DefaultConfigurationBuilder的两个重载。零参数版本声明为返回Configuration,而不是AbstractConfiguration的子类(尽管可以将其强制转换为AbstractConfiguration),并且Configuration甚至都没有定义setListDelimiter

根据这些要求,您能否阐明如何控制列表定界符?

跟进:

呼叫AbstractConfiguration.setDefaultListDelimiter(listDelim)为我解决了这个问题。

兰德尔·舒尔茨

最佳答案

要更改单个配置对象的列表定界符,请使用方法setListDelimiter()

要更改所有配置的列表定界符,请使用静态方法setDefaultListDelimiter()

更改定界符只会影响新的配置解析。因此,仅在设置列表定界符之后refresh()您的配置或加载您的配置文件。



ListDelimiterDemo.java

import org.apache.commons.configuration.AbstractFileConfiguration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;


public class ListDelimiterDemo {

    public static void main(String[] args) throws ConfigurationException {
        AbstractFileConfiguration config = new PropertiesConfiguration();
        config.setListDelimiter('|');
        config.load("config.properties");

        for (Object listItem : config.getList("myprop")) {
            System.out.println(listItem);
        }
    }
}


config.properties:

myprop=hello|world|!


印刷品:

hello
world
!

08-18 16:45