如何在 java 中创建具有一对多关系的属性?
How create in java a properties with one to many relationship?
我有一个文件,我在其中保存了一个键和一些条目(一对多关系)。
我需要从这个文件中提取按键搜索的值。
我刚找到一个实用程序 (java.util.Properties) 来处理 Java.
中的属性文件
它适用于属性文件。
但它 return 第一次出现搜索的键。
由于存在于属性文件中,我希望已经存在一个允许多个结果的版本。
是否存在 return 研究密钥的字符串数组的解决方案?
属性由哈希表支持,因此键必须是唯一的。
因此,如果你想坚持使用同一键的多个实例,你可以自己实现解析(如果你不太依赖 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)。我更喜欢抛出异常,以便调用者可以决定在属性文件丢失时要做什么。
我有一个文件,我在其中保存了一个键和一些条目(一对多关系)。
我需要从这个文件中提取按键搜索的值。
我刚找到一个实用程序 (java.util.Properties) 来处理 Java.
中的属性文件
它适用于属性文件。
但它 return 第一次出现搜索的键。
由于存在于属性文件中,我希望已经存在一个允许多个结果的版本。
是否存在 return 研究密钥的字符串数组的解决方案?
属性由哈希表支持,因此键必须是唯一的。 因此,如果你想坚持使用同一键的多个实例,你可以自己实现解析(如果你不太依赖 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)。我更喜欢抛出异常,以便调用者可以决定在属性文件丢失时要做什么。