问题描述
我有一个文件,其中保存了一个带有某些条目的键(一对多的关系)。
我需要从该文件中提取按键搜索的值。
我刚刚找到了一个实用程序(java.util.Properties)来处理Java中的属性文件。
它对于属性文件非常有效。
但是它返回的是搜索到的键的第一次出现。
由于存在属性文件,因此我希望已经存在一个允许多个结果的版本。
是否存在一种解决方案,该解决方案返回所研究密钥的字符串数组?
解决方法
属性由哈希表支持,因此密钥必须唯一。 因此,如果您要坚持使用同一个键的多个实例,则可以自己实现解析(如果您不太依赖于Properties管理的额外功能):
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class FileInput {
Properties porp;
public static Map<String,List<String>> loadProperties(String file) throws IOException
{
HashMap<String,List<String>> multiMap = new HashMap<>();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line = null;
while ((line = br.readLine()) != null) {
if (line.startsWith("#"))
continue; // skip comment lines
String[] parts = line.split("=");
multiMap.computeIfAbsent(parts[0].trim(),k -> new ArrayList<String>()).add(parts[1].trim());
}
}
return multiMap;
}
public static void main(String[] args) throws IOException {
Map<String,List<String>> result=loadProperties("myproperties.properties");
}
}
更新:改进了异常处理(有效备注@rzwitsersloot)。我更喜欢抛出异常,以便调用者可以决定如果缺少属性文件该怎么办。