Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Properties file with a list as the value for an individual key

For my program I want to read a key from a properties file and an associated List of values for the key.
Recently I was trying like that

public static Map<String,List<String>>categoryMap = new Hashtable<String, List<String>>();       Properties prop = new Properties();       try {          prop2.load(new FileInputStream(/displayCategerization.properties));         Set<Object> keys = prop.keySet();         List<String> categoryList = new ArrayList<String>();         for (Object key : keys) {             categoryList.add((String)prop2.get(key));             LogDisplayService.categoryMap.put((String)key,categoryList);         }         System.out.println(categoryList);         System.out.println("Category Map :"+LogDisplayService.categoryMap);          keys = null;         prop = null;      } catch (Throwable e) {         e.printStackTrace();     } 

and my properties file is like below -

A=APPLE A=ALPHABET A=ANT B=BAT B=BALL B=BUS 

I want for key A there should be a list which contain [APPLE, ALPHABET,ANT] and B contain [BAT,BALL,BUS].
So Map should be like this {A=[APPLE, ALPHABET,ANT], B=[BAT,BALL,BUS]} but I get
{A=[ANT], B=[BUS]}
I searched on the internet for such a way but found nothing. I wish there should be a way. Any help?

like image 801
NIVESH SENGAR Avatar asked Mar 16 '12 13:03

NIVESH SENGAR


People also ask

Where is key properties file?

Our key. properties file is in flutter_app/android/key. properties .


2 Answers

Try writing the properties as a comma separated list, then split the value after the properties file is loaded. For example

a=one,two,three b=nine,ten,fourteen 

You can also use org.apache.commons.configuration and change the value delimiter using the AbstractConfiguration.setListDelimiter(char) method if you're using comma in your values.

like image 54
DwB Avatar answered Sep 17 '22 23:09

DwB


The comma separated list option is the easiest but becomes challenging if the values could include commas.

Here is an example of the a.1, a.2, ... approach:

for (String value : getPropertyList(prop, "a")) {     System.out.println(value); }  public static List<String> getPropertyList(Properties properties, String name)  {     List<String> result = new ArrayList<String>();     for (Map.Entry<Object, Object> entry : properties.entrySet())     {         if (((String)entry.getKey()).matches("^" + Pattern.quote(name) + "\\.\\d+$"))         {             result.add((String) entry.getValue());         }     }     return result; } 
like image 33
subie Avatar answered Sep 17 '22 23:09

subie