Java 如何使用.properties文件中的条目创建哈希映射

Java 如何使用.properties文件中的条目创建哈希映射,java,excel,hashmap,properties-file,Java,Excel,Hashmap,Properties File,我想用.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

我想用.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
转换为哈希映射

它应该进入第二排

key1 = A1
key2 = A2
key3 = A3
key1 = B1
key2 = B2
key3 = B3
进入哈希映射,等等


它应该为每次迭代将键和值添加到相同的哈希映射中,并且应该清除哈希映射中以前的条目

通常使用
java.util.Properties
读取属性文件。但是,由于多次定义了相同的键,因此在处理文件后,每个键的值中只有一个可用。这意味着您需要手动读取文件(可能是
BufferedReader
),解析每一行,然后构建所需的映射


但是,在迭代之间清除hashmap没有多大意义,除非您在每次迭代中都创建一个新的映射,或者对结果做一些处理。同样,HashMap只能为每个键存储一个值,因此您需要另一个数据结构来保存您可能需要的内容。

您可以尝试以下方法:-

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);
    }
}
Properties MyPropertyFile=新属性();
FileInputStream ip=新的FileInputStream(“.properties文件路径”);
MyPropertyFile.load(ip);
String row=“AA”//写入逻辑以从excel工作表中获取行值并在变量中更新。
HashMap=newHashMap();
Set keys=MyPropertyFile.keySet();
用于(对象k:关键点){
字符串键=(字符串)k;
字符串值=MyPropertyFile.getProperty(键);
if(row.charAt(0)=value.charAt(0))//检查行的第一个字符和第一个字符的值是否相同。
map.put(键、值);
}
}

据我所知,您希望根据属性文件中的注释(##AA、##BB等),从属性文件中选择一组键值对

请记住,一般情况下,“键”不应在属性文件中重复。 如果重复,则它将始终获取最后一个值。 例如,如果您尝试检索“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();
        }


    }

}
package-com;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.util.Enumeration;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.PropertyResourceBundle;
导入java.util.ResourceBundle;
公共类属性映射{
公共静态void main(字符串[]args){
文件输入流fis;
试一试{
fis=新文件输入流(“D://MyProps.properties”);
ResourceBundle resources=新的PropertyResourceBundle(fis);
Map Map=newhashmap();
//将ResourceBundle转换为映射
枚举键=resources.getKeys();
while(keys.hasMoreElements()){
String key=keys.nextElement();
map.put(key,resources.getString(key));
}
//现在,您可以根据需要使用“映射”对象。
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}

感谢Vishal的快速响应,我现在可以从属性文件创建HashMap。这里我还有一个问题,如果一个键在属性文件中包含多个值(例如,2个值),那么它应该将2个值放入该键的HashMap中。使用此代码,它将作为单个字符串进入HashMap。是的,您可以为HashMap中的单个键插入和检索多个值。有关示例,请参阅此链接: