Java 从属性文件将映射作为键加载
如何从属性文件中获取映射作为键并加载到列表中。例如,我想从属性文件创建学生信息的hashmap。属性文件可以是Java 从属性文件将映射作为键加载,java,collections,java-8,Java,Collections,Java 8,如何从属性文件中获取映射作为键并加载到列表中。例如,我想从属性文件创建学生信息的hashmap。属性文件可以是 <map name=student1> <value key=name>abc</value> <value key=age>12</value> <value key=gender>male</value> <map name=student2> <value key=name&g
<map name=student1>
<value key=name>abc</value>
<value key=age>12</value>
<value key=gender>male</value>
<map name=student2>
<value key=name>xyz</value>
<value key=age>15</value>
<value key=gender>female</value>
...
abc
12
男性的
xyz
15
女性的
...
我想使用诸如student1、student2等键创建所有这些映射的列表。我们如何在简单的java8项目中使用属性文件在一次加载中实现这一点。如果我重复问任何问题,我很抱歉。我试图寻找我的解决方案,但没有找到。如果之前回答了相同的问题,请帮助链接。如果我正确理解了问题,您希望将XML配置解组到一个映射中,其中用户有任意字段 配置文件缺少映射节点的闭包。 采用以下格式后,您将能够轻松地自动化解码过程:
<Config>
<map name="student1">
<value key="name">abc</value>
<value key="age">12</value>
<value key="gender">male</value>
</map>
<map name="student2">
<value key="name">xyz</value>
<value key="age">15</value>
<value key="gender">female</value>
</map>
</Config>
XML文件也是数据结构的一种形式,尽管XML文件的可能性更大,并且提供了更多的数据灵活性和对象序列化。您的配置可以以属性格式、XML、JSON等存储。但是,您的数据类型表明使用了比属性更复杂的数据存储结构这看起来像XML,而不是属性文件。@Holger,我写这些值只是为了理解。我们还可以将属性作为XML传递。如果你有其他方法,欢迎你的建议。感谢重点是,你说“我试图寻找我的解决方案,但没有得到”,但很明显,你搜索了错误的术语。如果要解析XML文件,必须搜索“XML”,而不是“属性文件”。否则,您没有找到匹配的Q&a也就不足为奇了。@holger为什么您认为属性文件不能是xml格式
try {
final File configFile = Paths.get("C:/Development/file.xml").toFile();
final DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
final DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
final Document doc = dBuilder.parse(configFile);
final NodeList nodeList = doc.getChildNodes();
if (nodeList.getLength() == 0) {
throw new IllegalArgumentException("Config is empty or incorrect.");
}
final NodeList elements = nodeList.item(0).getChildNodes();
final Map<String, User> users = new HashMap<>();
for (int i = 0; i < elements.getLength(); i++) {
final Node item = elements.item(i);
if (!"map".equals(item.getNodeName())) {
continue;
}
final String key = item.getAttributes().getNamedItem("name").getNodeValue();
final NodeList childNodes = item.getChildNodes();
String name;
String age;
String gender;
for (int j = 0; j < childNodes.getLength(); j++) {
final Node childItem = childNodes.item(j);
if (!"value".equals(childItem.getNodeName())) {
continue;
}
final String fieldName = childItem.getAttributes().getNamedItem("key").getNodeValue();
final String fieldValue = childItem.getNodeValue();
switch (fieldName) {
case "name":
name = childItem.getNodeValue();
break;
case "age":
age = childItem.getNodeValue();
break;
case "gender":
gender = childItem.getNodeValue();
break;
default:
throw new IllegalArgumentException(String.format("Unknown user field %s", fieldName));
}
}
users.put(key, new User(name, age, gender));
}
} catch (final ParserConfigurationException | SAXException | IOException e) {
throw new IllegalArgumentException("Error during config parsing");
}
property.name=value
other.property.name=value