如果文件中存在重复的键值对,如何读取属性文件?

时间:2013-12-11 06:15:03

标签: java collections duplicates properties-file

我正在使用load()属性类加载我的属性文件。我能够使用set,hashmap,treeset,enumeration读取属性类的键值对,但它不能检索重复项对。重复对只能检索一次。

3 个答案:

答案 0 :(得分:7)

来自Apache Commons Configuration的

PropertiesConfiguration支持使用相同的密钥加载具有多个条目的属性文件。

使用getStringArray(key)方法或getList(key)方法访问指定键的所有值。

答案 1 :(得分:6)

属性文件设置键值对。所有键都是唯一的,因此它不会捕获重复的对。 相反,它将获取最新的映射对。例如:

示例文件:

a=1
b=2
c=3
d=4
a=10
c=7

属性类将返回最新的对,即

a=10
b=2
c=7
d=4

如果您的要求是查找所有对是否重复,请使用以下使用Scanner类和两个arraylist对象的代码。

        ArrayList k = new ArrayList();
        ArrayList v = new ArrayList();
        Scanner scan = new Scanner(new File("E:\\abc.properties"));
        while(scan.hasNextLine()) {
            //System.out.println(scan.nextLine());
            String split[] = scan.nextLine().trim().split("=");
            if(split.length == 2) {
            k.add(split[0]);
            v.add(split[1]);
            System.out.println("pair " + split[0] + ":" + split[1]);
            }
            //System.out.println("a");*/
        }

答案 2 :(得分:0)

您可以使用缓冲读取器读取文件的行并拆分结果:

public static void main(String[] args) throws IOException {
    Reader file = new FileReader("C:/file.cfg");
    BufferedReader br = new BufferedReader(file);

    String line = br.readLine();
    while (line != null) {
        String obj[] = line.split("=");

        for (int i=0 ;  i<obj.length; i=+2  ){
            System.out.println(obj[i]+"="+obj[i+1]);

        line = br.readLine();
        }
    }
}