0

我正在使用 commons-configuration v1.10 并且我正在使用该类PropertiesConfiguration来读取我的应用程序属性。我有一个包含逗号的属性,但是当我读入它时,它会被分隔,我不知道如何让它不分隔。

它按顺序吐出所有属性,包括逗号,但它成为问题的原因是因为我在它周围有'['和']'。

AbstractConfiguration有一个setDelimiterParsingDisabled()禁用分隔符的函数,但我找不到一个实现它来读取属性文件的类。

private static String readProperty(String property) {
    try {
        Configuration configuration = new PropertiesConfiguration(propertiesFile);
        return configuration.getProperty(property).toString();
    }
    catch(ConfigurationException e) {
        System.out.println("Issue reading " + property + " property");
        e.printStackTrace();
        System.exit(1);
        return "";
    }
}
4

4 回答 4

1

它可以工作,但您应该在加载配置之前禁用或设置它。

PropertiesConfiguration config = new PropertiesConfiguration();
config.setDelimiterParsingDisabled(true)
config.setListDelimiter(';');
config.setFile(new File("application.properties"));
config.load();
于 2019-02-25T20:45:36.493 回答
0

发布您的代码会有所帮助。

根据您想要的官方文档AbstractConfiguration.setListDelimiter(null)

您还可以使用String方法来查找和删除周围的 []。假设该属性位于一个名为 的字符串中prop

int start = prop.indexOf('[') + 1;
int end = prop.lastIndexOf(']');
String val = prop.substring(start,
    end > 0 ? end : prop.length());

indexOf如果未找到字符,则返回 -1,因此添加 1 以获取实际属性值的开头始终有效,即使分隔符不存在也是如此。

于 2014-07-25T18:38:06.530 回答
0

看起来我不能使用 Apache Commons 或PropertiesConfiguration在没有分隔的情况下检索属性。但是,java.util.Properties没有这个问题,所以用 that 代替PropertiesConfiguration.

MKYong 有一个很好的例子来说明如何设置它,http: //www.mkyong.com/java/java-properties-file-examples/

于 2014-07-28T15:25:06.550 回答
0
PropertiesConfiguration properties = new PropertiesConfiguration();
properties.setDelimiterParsingDisabled(true);

上面的代码解决了问题,不需要切换到java.util.Properties。层次结构如下:

    PropertiesConfiguration
              |
              |(extends)
              |
    AbstractFileConfiguration
              |
              |(extends)
              |
    BaseConfiguration
              |
              |(extends)
              |
    AbstractConfiguration

就我而言,我专门使用了 Apache Properties Configuration,因为它支持java.util.Properties 中不支持的变量替换

于 2016-08-18T06:51:12.370 回答