簡體   English   中英

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

[英]How to create hash map with entries from .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等等....

它應該為每次迭代將鍵和值添加到相同的哈希映射中,並且應該清除哈希映射中的先前條目

您可以嘗試以下內容: -

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);
    }
}

通常使用java.util.Properties讀取屬性文件。 但是,由於您具有多次定義的相同鍵,因此在處理文件后,每個鍵只能使用其中一個值。 這意味着您需要手動讀取文件(可能是BufferedReader ),解析每一行,然后構建所需的地圖。

盡管除非您每次迭代創建一個新映射或對結果執行某些操作,否則清除迭代之間的散列映射並沒有多大意義。 同樣,HashMap每個鍵只能存儲一個值,因此您需要另一個數據結構來保存您可能需要的內容。

據我了解您的問題,您希望根據屬性文件中的注釋(## 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();
        }


    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM