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

时间:2015-08-07 06:08:33

标签: 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 = DD

我想迭代所有行,当它在第一行时,它应该输入

key1 = A1
key2 = A2
key3 = A3

到一个hashmap

第二行应输入

key1 = B1
key2 = B2
key3 = B3

到一个hashmap等等......

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

3 个答案:

答案 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();
        }


    }

}