You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java解析含Array结构的.plist文件时遇空值问题求助

解决Commons Configuration 2.x读取带Array结构的.plist文件问题

我太懂你现在的困扰了——用Commons Configuration 2.x的XMLPropertyListConfiguration读plist时,只要里面有<array>标签,就拿不到dictionary节点下的内容,删掉array就正常,但目标文件又没法改结构。其实问题出在没适配plist数组结构的读取逻辑,我来帮你调整代码:

问题根源

你的plist结构里,dictionary对应的是一个<array>,真正的键值对容器<dict>藏在数组里面。而你原来的代码直接用plist.getKeys("dictionary"),是在找dictionary节点下的直接子键,但dictionary的直接子节点是array,不是具体的key,所以自然拿不到内容。

修正后的代码

import org.apache.commons.configuration2.ConfigurationException;
import org.apache.commons.configuration2.HierarchicalConfiguration;
import org.apache.commons.configuration2.plist.XMLPropertyListConfiguration;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;

public void parsePlist(File f) throws ConfigurationException, FileNotFoundException {
    XMLPropertyListConfiguration plist = new XMLPropertyListConfiguration();
    // 加载plist文件,建议后续改成指定UTF-8编码避免乱码问题
    BufferedReader br = new BufferedReader(new FileReader(f));
    plist.read(br);

    // 获取dictionary对应的array下的所有dict配置实例
    List<HierarchicalConfiguration> dictConfigs = plist.configurationsAt("dictionary");
    
    // 遍历数组里的每个dict节点
    for (HierarchicalConfiguration config : dictConfigs) {
        // 获取当前dict下的所有key
        Iterator<String> keys = config.getKeys();
        while (keys.hasNext()) {
            String key = keys.next();
            String value = config.getString(key);
            System.out.println(key + ": " + value);
        }
    }
}

代码说明

  • configurationsAt("dictionary")方法会返回dictionary节点下所有数组元素的配置对象,也就是每个<dict>对应的配置实例。
  • 遍历这些配置实例后,再用getKeys()就能拿到每个dict里的所有键,进而获取对应的值。
  • 如果你的array里有多个<dict>,这段代码也能逐个处理,完全适配你的plist结构。

要是你只需要获取某个特定key的值,比如key1,可以简化成这样:

for (HierarchicalConfiguration config : dictConfigs) {
    String value1 = config.getString("key1");
    System.out.println("key1的值:" + value1);
}

内容的提问来源于stack exchange,提问作者Tobias Schäfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:22:26