The property class is a subclass of HashTable, which in turn implements Map.
You load it as usual with
Properties properties = new Properties(); try { properties.load(new FileInputStream("filename.properties")); } catch (IOException e) { }
edit: Ok to convert it to Map <String, Datasource>;)
//First convert properties to Map<String, String> Map<String, String> m = Maps.fromProperties(properties); //Sort them so that password < url < user for each datasource and dataSource1.* < dataSource2.*. In your case default string ordering is ok so we can take a normal treemap Map<String, String> sorted = Maps.newTreeMap(); sorted.putAll(m); //Create Multimap<String, List<String>> mapping datasourcename->[password,url, user ] Function<Map.Entry<String, String>, String> propToList = new Function<String, Integer>() { @Override public String apply(Map.Entry<String, String> entry) { return entry.getKey().split("\\.")[0]; } }; Multimap<Integer, String> nameToParamMap = Multimaps.index(m.entrySet(), propToList); //Convert it to map Map<String, Collection<String>> mm = nameToParamMap.asMap(); //Transform it to Map<String, Datasource> Map<String, Datasource> mSD = Maps.transformEntries(mm, new EntryTransformer<String, Collection<String>, DataSource>() { public DataSource transformEntry(String key, Collection<String> value) { // Create your datasource. You know by now that Collection<String> is actually a list so you can assume elements are in order: [password, url, user] return new Datasource(.....) } }; //Copy transformed map so it no longer a view Map<String, Datasource> finalMap = Maps.newHashMap(mSD);
This is probably an easier way, but this should work :)
However, you're better off with json or xml. You can also load properties of different data sources from different files.
edit2: with less guava, more java:
//Sort them so that password < url < user for each datasource and dataSource1.* < dataSource2.*. In your case default string ordering is ok so we can take a normal SortedSet SortedSet <String> sorted = new SortedSet<String>(); sorted.putAll(m.keySet); //Divide keys into lists of 3 Iterable<List<String>> keyLists = Iterables.partition(sorted.keySet(), 3); Map<String, Datasource> m = new HashMap<String, Datasource>(); for (keyList : keyLists) { //Contains datasourcex.password, datasroucex.url, datasourcex.user String[] params = keyList.toArray(new String[keyList.size()]); String password = properties.get(params[0]); String url = properties.get(params[1]); String user = properties.get(params[2]); m.put(params[0].split("\\.")[0], new DataSource(....) }