如何在java中创建一个类似于(key,value)属性文件的(key,value1,value2)文件

时间:2010-08-30 11:24:54

标签: java

您能否建议如何在java中创建(key,value1,value2)文件,类似于(key,value)属性文件。任何开源项目都使用这种类型的文件。

Thanksyou。

8 个答案:

答案 0 :(得分:6)

您可以使用分隔符:

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

您也可以使用密钥后缀:

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

答案 1 :(得分:4)

你也可以使用apache commons集合包,它有一个方便的MultiValue map实现。 有关详细信息,请参阅Javadoc

答案 2 :(得分:4)

Commons ConfigurationPropertiesConfiguration类支持单个键的多个值。

有关示例,请参阅here

答案 3 :(得分:1)

考虑multi-valued属性文件。 Properties类从Hashtable扩展。您可以创建一个使用Hashtable<String, String[]>

的新类

获取java/utils/Properties.java的源代码并进行相应修改。

以下是您的属性文件的外观:

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

答案 4 :(得分:1)

您可以扩展Map界面,例如:

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]

答案 5 :(得分: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;
   }
}

答案 6 :(得分:0)

使用(键,值[])代替

答案 7 :(得分:0)

已经提出了最简单的方法 - 如果你正在寻找一种方法来修改一个实现Map接口的类来接受2个值而不是1个,那么要小心。 Map接口有很多方法,如果你尝试这种方法可能会以意想不到的方式运行 - 它可以完成它的工作量远远超过它的价值:)