我有这个属性:
move.patternfile.include = *1a.txt,*2a.txt
我正在尝试使用Apache commons configuration2将其放入列表中。
我的代码是:
Configurations configs = new Configurations();
AbstractConfiguration config = configs.properties(new File(fileName));
config.setListDelimiterHandler(new DefaultListDelimiterHandler(','));
我可以读取所有其他属性,但我想要的仍然是1个大小的列表。
这是检索值的命令:
List<String> linclude = configuration.getList(String.class, "patternfile.include");
你能帮帮忙吗?
答案 0 :(得分:6)
基于this,似乎必须在从文件中读取属性之前设置分隔符。下面的代码在我运行时起作用,但会产生警告。
Parameters params = new Parameters();
FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
new FileBasedConfigurationBuilder<PropertiesConfiguration>(
PropertiesConfiguration.class).configure(params.fileBased()
.setListDelimiterHandler(new DefaultListDelimiterHandler(','))
.setFile(new File("test.properties")));
PropertiesConfiguration config = builder.getConfiguration();
List<String> linclude = config.getList(String.class, "patternfile.include");
System.out.println(linclude.size());
for(String item: linclude){
System.out.println(item);
}
<强> test.properties 强>
patternfile.include = * 1a.txt,* 2a.txt
<强>输出强>
2
* 1a.txt
* 2a.txt
以下是我在运行时看到的警告:
Jun 26, 2016 2:12:17 AM org.apache.commons.beanutils.FluentPropertyBeanIntrospector introspect
WARNING: Error when creating PropertyDescriptor for public final void org.apache.commons.configuration2.AbstractConfiguration.setProperty(java.lang.String,java.lang.Object)! Ignoring this property.
java.beans.IntrospectionException: bad write method arg count: public final void org.apache.commons.configuration2.AbstractConfiguration.setProperty(java.lang.String,java.lang.Object)
at java.beans.PropertyDescriptor.findPropertyType(Unknown Source)
at java.beans.PropertyDescriptor.setWriteMethod(Unknown Source)
at java.beans.PropertyDescriptor.<init>(Unknown Source)
at org.apache.commons.beanutils.FluentPropertyBeanIntrospector.createFluentPropertyDescritor(FluentPropertyBeanIntrospector.java:177)
at org.apache.commons.beanutils.FluentPropertyBeanIntrospector.introspect(FluentPropertyBeanIntrospector.java:140)
at org.apache.commons.beanutils.PropertyUtilsBean.fetchIntrospectionData(PropertyUtilsBean.java:2234)
at org.apache.commons.beanutils.PropertyUtilsBean.getIntrospectionData(PropertyUtilsBean.java:2215)
at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:950)
at org.apache.commons.beanutils.PropertyUtilsBean.isWriteable(PropertyUtilsBean.java:1466)
at org.apache.commons.configuration2.beanutils.BeanHelper.isPropertyWriteable(BeanHelper.java:521)
at org.apache.commons.configuration2.beanutils.BeanHelper.initProperty(BeanHelper.java:357)
at org.apache.commons.configuration2.beanutils.BeanHelper.initBeanProperties(BeanHelper.java:273)
at org.apache.commons.configuration2.beanutils.BeanHelper.initBean(BeanHelper.java:192)
at org.apache.commons.configuration2.beanutils.BeanHelper$BeanCreationContextImpl.initBean(BeanHelper.java:669)
at org.apache.commons.configuration2.beanutils.DefaultBeanFactory.initBeanInstance(DefaultBeanFactory.java:162)
at org.apache.commons.configuration2.beanutils.DefaultBeanFactory.createBean(DefaultBeanFactory.java:116)
at org.apache.commons.configuration2.beanutils.BeanHelper.createBean(BeanHelper.java:459)
at org.apache.commons.configuration2.beanutils.BeanHelper.createBean(BeanHelper.java:479)
at org.apache.commons.configuration2.beanutils.BeanHelper.createBean(BeanHelper.java:492)
at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResultInstance(BasicConfigurationBuilder.java:447)
at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResult(BasicConfigurationBuilder.java:417)
at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.getConfiguration(BasicConfigurationBuilder.java:285)
at main.Main.main(Main.java:25)
我发现this link有关此警告消息。
答案 1 :(得分:2)
在Apache Commons Configuration中,有PropertiesConfiguration。它支持converting delimited string to array/list.
例如,如果您有属性文件
#Foo.properties
foo=bar1, bar2, bar3
使用以下代码:
PropertiesConfiguration config = new PropertiesConfiguration("Foo.properties");
String[] values = config.getStringArray("foo");
将为您提供["bar1", "bar2", "bar3"]
getString
仅返回多值键的第一个值。尝试getStringArray
获取两个值。
<强> ApacheCommonPropertyConfig.java 强>
import java.util.List;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
public class ApacheCommonPropertyConfig {
public static void main(String[] args) throws ConfigurationException {
PropertiesConfiguration config;
try {
config = new PropertiesConfiguration("F://foo.properties");
// For Array
String[] values = config.getStringArray("foo");
for(String strVal : values) {
System.out.println("Array Value is: "+strVal);
}
// For List
List<Object> linclude = config.getList("foo");
for(Object str : linclude){
System.out.println("List Value is: "+str.toString());
}
// For List Another
List<Object> list = config.getList("listOfValue", config.getList("foo"));
for(Object str : list){
System.out.println("Another List Value is: "+str.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
foo=bar1, bar2, bar3
Array Value is: bar1
Array Value is: bar2
Array Value is: bar3
List Value is: bar1
List Value is: bar2
List Value is: bar3
Another List Value is: bar1
Another List Value is: bar2
Another List Value is: bar3
<强> 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("F://foo.properties");
for (Object listItem : config.getList("foo")) {
System.out.println(listItem);
}
}
}
bar1
bar2
bar3