我想用.properties文件中的条目创建一个哈希映射。 我的属性文件如下:
##AA
key1 = A1
key2 = A2
key3 = A3
##BB
key1 = B1
key2 = B2
key3 = B3
##CC
key1 = C1
key2 = C2
key3 = C3, C4
##DD
key1 = D1
key2 = D2
key3 = D3, D4
我将在excel表中维护AA,BB,CC,DD。
row1 = AA
row2 = BB
row3 = CC
row4 = DD
我想迭代所有行,当它在第一行时,它应该输入
key1 = A1
key2 = A2
key3 = A3
到一个hashmap
第二行应输入
key1 = B1
key2 = B2
key3 = B3
到一个hashmap等等......
它应该将键和值添加到每次迭代的相同哈希映射中,并且应该清除哈希映射中的先前条目
答案 0 :(得分:1)
您可以尝试以下内容: -
Properties MyPropertyFile= new Properties();
FileInputStream ip = new FileInputStream(".properties file path");
MyPropertyFile.load(ip);
String row="AA"; //write logic to get row value from excel sheet and update in a variable.
HashMap<String, String> map=new HashMap<String, String>();
Set<Object> keys = MyPropertyFile.keySet();
for(Object k:keys){
String key=(String) k;
String value=MyPropertyFile.getProperty(key);
if(row.charAt(0)==value.charAt(0))// check row's first character and values first character are same.
map.put(key, value);
}
}
答案 1 :(得分:0)
通常使用java.util.Properties
读取属性文件。但是,由于您具有多次定义的相同键,因此在处理文件后,每个键只能使用其中一个值。这意味着您需要手动读取文件(可能是BufferedReader
),解析每一行,然后构建所需的地图。
清除迭代之间的散列图并没有多大意义,除非你每次迭代都要制作一个新的映射或者对结果做一些事情。同样,HashMap每个键只能存储一个值,因此您需要另一个数据结构来保存您可能需要的内容。
答案 2 :(得分:0)
据我了解您的问题,您希望根据属性文件中的注释(## AA,## BB等)从属性文件中选择一组键值对。 / p>
请记住,一般情况下,不应在属性文件中重复“密钥”。 如果重复,那么它将始终获取最后一个值。 例如,如果您尝试检索'key1'的值,它将始终返回'D1'。 您可以尝试将密钥命名为key1AA,key2AA,key3AA,key1BB,key2BB等。
此外,如果您尝试检索'key3',您将获得完整的值'D3,D4'。
以下是我尝试使用您的属性文件的示例:
package com;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class PropertiesToMap {
public static void main(String[] args) {
FileInputStream fis;
try {
fis = new FileInputStream("D://MyProps.properties");
ResourceBundle resources = new PropertyResourceBundle(fis);
Map<String,String> map = new HashMap<String,String>();
//convert ResourceBundle to Map
Enumeration<String> keys = resources.getKeys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
map.put(key, resources.getString(key));
}
//Now you can use the 'map' object as you wish.
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}