2010-08-30 3 views
2

Можете ли вы предложить, как создать файл (key, value1, value2) в java, аналогичный (key, value) файл свойств. В любом проекте с открытым исходным кодом используется такой тип файла.Как создать файл (key, value1, value2) в java, аналогичный файлу свойства (key, value)

Спасибо.

+1

Не можете ли вы просто использовать XML? – skaffman

+3

, поэтому вы хотите использовать 'java.util.Properties'? – Bozho

ответ

6

Вы можете использовать разделитель:

props.put(key, value1 + DELIMITER + value2); 

вы можете также использовать ключ-суффикс:

props.put(key + "1", value1); 
props.put(key + "2", value2); 
0

Используйте (ключ, значение []) вместо

+0

Если я правильно предположил, что он хочет использовать 'java.util.Properties', чтобы сохранить структуру в файле свойств, это не сработает. – Bozho

1

Думая multi-valued собственности файлы. Класс Properties распространяется от Hashtable. Вы можете создать новый класс, который использует Hashtable<String, String[]>

Возьмите исходный код java/utils/Properties.java и внесите соответствующие изменения.

Вот как ваш файл свойства должен выглядеть следующим образом:

key1 = value 
key2 = value_1 
key2 = value_2 
key3 = my_value_3 
+1

хорошая идея, но как она будет представлена ​​в файле '.properties'? – Bozho

+0

Это будет зависеть от того, как вы изменяете java/utils/Properties.java. Одно предложение - использовать свою собственную идею;) (примечание: я не являюсь автором ответа) –

+0

добавил образец.как указано в @peter, вы можете использовать свою собственную идею; многострочный выглядит хорошо для меня. – ankitjaininfo

4

вы также можете использовать сбор пакет Apache Commons он имеет удобную реализацию MultiValue карты. Дополнительную информацию см. На Javadoc.

0

Самый простой способ сделать это уже был предложен - если бы вы искали способ изменить класс, который реализует интерфейс карты, чтобы принимать 2 значения вместо 1, тогда будьте осторожны , Интерфейс Map имеет множество методов, которые могут вести себя неожиданным образом, если вы попытаетесь это сделать - это можно сделать его просто намного больше работы, чем это может быть стоит :)

+0

Это неправда. См. Мой ответ :) –

1

Вы могли бы расширяет интерфейс карты, что-то вроде:

public class Multimap<K, V> extends HashMap<K, V[]> { 

@Override 
public V[] put(K key, V...value) { 
    return super.put(key, value); 
} 

} 

Тогда

Multimap<String,String> mapStr = new Multimap<String, String>(); 
mapStr.put("key1", "value1", "value2"); 
System.out.println("Strings: key1 = " + Arrays.toString(mapStr.get("key1"))); 


Multimap<String,Integer> mapInt = new Multimap<String, Integer>(); 
mapInt.put("key1", 1, 2); 
System.out.println("Integers: key1 = " + Arrays.toString(mapInt.get("key1"))); 

дают бы

Strings: key1 = [value1, value2] 
Integers: key1 = [1, 2] 
1

Вы также можете попробовать что-то вроде этого.

prop1 = one 
prop2 =two 
#prop12 is a multivalued property.values are the combination of prop1 and prop2 
prop12= prop1,prop2 

Предполагая, что в файле свойств есть записи, подобные этому.

public class MVProperties extends Properties{ 

public List<String> getMultiValuedProperty(String key){ 
    List<String> values = null; 
    String[] references = getProperty(key,"").split(","); 
    if(references.length == 0){ 
     return values; 
    } 
    values = new ArrayList<String>(); 
    for(String ref:references){ 
     values.add(getProperty(ref)); 
    } 
    return values; 
    } 
} 
+0

Вот как пользователь пройдет ключ #chedine ?? – Ankit

Смежные вопросы