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

我想用.properties文件中的条目创build一个Hash Map。 我的属性文件如下所示:

##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

应该input第二行

 key1 = B1 key2 = B2 key3 = B3 

进入散列表等等….

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

你可以尝试如下所示:

 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 ),parsing每一行,并build立你想要的地图。

清除迭代之间的哈希映射没有什么意义,除非你每次迭代都要做一个新的映射或者对结果做一些事情。 再一次,HashMap只能为每个键存储一个值,所以你将需要另一个数据结构来保存你可能需要的东西。

据我了解你的问题,你想从属性文件中select一组键值对,根据你在属性文件中的注释(## 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(); } } } 
Interesting Posts