config.getString在配置路径层级超2层时返回null的问题求助
配置路径层级超过2层时
config.getString返回null的解决方法 问题场景
配置文件config.yml内容:
gui: title: "This is the GUI's name" items: feather: "This is item feather" cookie: hello: "Hello, here's a cookie"
对应的Java代码:
String guiTitle = config.getString("gui.title"); String itemsFeather = config.getString("items.feather"); String itemsOnTest = config.getString("items.cookie.hello"); getLogger().info("Gui title: " + guiTitle); getLogger().info("Items feather: " + itemsFeather); getLogger().info("Items on test: " + itemsOnTest);
运行后,guiTitle和itemsFeather能正确读取配置值,但itemsOnTest返回null;所有2层及以下的配置路径均可正常读取,3层及以上路径调用getString就返回null。
可能原因及解决方案
1. 检查配置文件格式
YAML对缩进要求严格,必须统一使用空格(不能混用制表符),且子节点缩进需比父节点多2/4个空格(保持一致即可)。
比如3层配置需确保缩进层级正确:
items: on: test: "hello"
确认on和test的缩进完全统一,无格式错误。
2. 确保配置文件正确加载
如果修改了配置文件但未重新加载,内存中的配置数据会和文件不一致。在插件启动或修改配置后,调用以下方法刷新配置:
// 生成默认配置(如果文件不存在) saveDefaultConfig(); // 重新读取配置文件内容 reloadConfig(); Configuration config = getConfig();
3. 逐层读取配置节点
若点分隔符写法失效,可尝试逐层获取配置节后再读取值:
ConfigurationSection cookieSection = config.getConfigurationSection("items.cookie"); if (cookieSection != null) { String itemsOnTest = cookieSection.getString("hello"); getLogger().info("Items on test: " + itemsOnTest); } else { getLogger().warning("items.cookie节点不存在"); }
4. 排查节点覆盖问题
检查代码中是否存在覆盖父节点的操作,比如:
// 错误写法:会覆盖整个items.cookie节点,删除hello子节点 config.set("items.cookie", new HashMap<>());
若需修改子节点,应直接指定完整路径:
// 正确写法:仅修改目标子节点 config.set("items.cookie.hello", "Updated value");
内容的提问来源于stack exchange,提问作者Giuseppe Gentile
相关产品推荐
相关产品推荐

