在java中使用property.getProperty(“sample。*”)从属性文件中获取所有属性值

时间:2016-03-10 23:08:35

标签: java

Property.properties

  

sample.user =“sampleUser”
  sample.age =“sampleAge”
  sample.location =“sampleLocation”

我可以通过prop.getProperty(“sample.user”)从属性文件中获取属性值。

我想知道以下情况是否可能:

prop.getProperty("sample.*");

结果:
sampleUser
sampleAge
sampleLocation

有人可以建议是否有办法从属性文件中获取上述结果?

一种解决方案是获取整个属性文件并迭代它。  但我的属性文件很长,我认为这会导致 性能问题因为我需要经常调用它。

Anther会使用.xml文件而不是.properties文件。

2 个答案:

答案 0 :(得分:2)

Properties对象(对象形式的.properties文件)只是Hashtable<Object,Object>(和Map)。不适合2016年的任何使用,但完全可行。

提取匹配并不是特别低效,甚至000行也应该在很短的时间内返回(可能只有几毫秒)。这一切都取决于您需要检查的频率。如果您只需要一次,只需缓存生成的matchingValues并返回它。

不,你不能直接prop.getProperty("sample.*");,但代码通过Map界面非常简单:

Properties p = new Properties();
p.setProperty("sample.user", "sampleUser");
p.setProperty("sample.age", "sampleAge");
p.setProperty("sample.location", "sampleLocation");

Pattern patt = Pattern.compile("sample.*");

final List<String> matchingValues = new ArrayList<>();

for (Entry<Object,Object> each : p.entrySet()) {
    final Matcher m = patt.matcher((String) each.getKey());
    if (m.find()) {
        matchingValues.add((String) each.getValue() );
    }
}

System.out.println(matchingValues);

上述配对和建筑在我5岁的iMac上花费了0.16毫秒。

切换到XML表示会更复杂,加载和处理速度肯定更慢。

答案 1 :(得分:1)

Java 8 中,它可能看起来像

Properties p = new Properties();
...
List<String> matchingValues = p.entrySet().stream()
                .filter(e -> e.getKey().toString().matches("sample.*"))
                .map(e -> e.getValue().toString())
                .collect(Collectors.toList());

System.out.println(matchingValues);