Property.properties
sample.user =“sampleUser”
sample.age =“sampleAge”
sample.location =“sampleLocation”
我可以通过prop.getProperty(“sample.user”)从属性文件中获取属性值。
我想知道以下情况是否可能:
prop.getProperty("sample.*");
结果:
sampleUser
sampleAge
sampleLocation
有人可以建议是否有办法从属性文件中获取上述结果?
一种解决方案是获取整个属性文件并迭代它。 但我的属性文件很长,我认为这会导致 性能问题因为我需要经常调用它。
Anther会使用.xml文件而不是.properties文件。
答案 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);