猥琐的小王
本帖最后由 猥琐的小王 于 2021-9-24 14:07 编辑
1.7.10 Uranium核心
这是我的代码
  1. package Main;

  2. import com.sun.istack.internal.NotNull;
  3. import org.bukkit.configuration.file.FileConfiguration;
  4. import org.bukkit.plugin.java.JavaPlugin;

  5. import java.io.File;

  6. public class main extends JavaPlugin{
  7.     @Override
  8.     public void onEnable() {
  9.         getLogger().info("测试插件成功加载!");
  10.         saveDefaultConfig();
  11.         FileConfiguration getconfig = getConfig();

  12.         /*
  13.         这是一个读取配置文件的代码
  14.          */
  15.         String accountName = getconfig.getString("Test.Name");
  16.         boolean Status = getconfig.getBoolean("Test.Name.enable");
  17.         int account = getconfig.getInt("Test.Name.account", 0000);
  18.         int password = getconfig.getInt("Test.Name.password", 0000);
  19.         getLogger().info("账号: " + accountName + " 已经激活");
  20.         getLogger().info("您的状态: " + Status);
  21.         getLogger().info("您的账号: " + account);
  22.         getLogger().info("您的密码: " + password);
  23.     }
  24. }
复制代码

然后是我的配置文件 config.yml
  1. Test:
  2.   Name: '猥琐的小王'
  3.     enable: true
  4.     account: 2648488310
  5.     password: 123456
复制代码
这是运行结果



为什么会错呢?





1139365029
你的yml的语法不正确:

父节点不能有数据的,要这样写:

参考:https://www.runoob.com/w3cnote/yaml-intro.html

Tidy_Bear
本帖最后由 Tidy_Bear 于 2021-9-24 11:17 编辑

一个 key 对应一个 value,我用 json 格式转换下你的 yaml,你应该就能知道了
{
    "Test" : {
        "Name": '猥琐的小王'
          "enable:" true,
          "account": 2648488310,
          "password": 123456

    }
}
Test.Name 你已经映射了字符串 '猥琐的小王',但后面又跟了一个 map 类型的 value,自然报错了



解决思路是,要么大家都是同级,即
  1. Test:
  2.   name: '猥琐的小王'
  3.   enable: true
  4.   account: 2648488310
  5.   password: 123456
复制代码
相应地,java 代码里面的指定也要改下

或者
  1. Test:
  2.   Name:
  3.     name: '猥琐的小王'
  4.     enable: true
  5.     account: 2648488310
  6.     password: 123456
复制代码
当然,我觉得第二种应该不是你想要的结果





猥琐的小王
Tidy_Bear 发表于 2021-9-24 11:12
一个 key 对应一个 value,我用 json 格式转换下你的 yaml,你应该就能知道了
{
    "Test" : {

那么我想把Test:的子键Name:直接作为账户名称,我该怎么获取这个 Name: ?
比如我换成
Test:
  xiaowang:

然后我想直接把xiaowang:作为一个账户名称,然后输出xiaowang

Tidy_Bear
本帖最后由 Tidy_Bear 于 2021-9-24 12:29 编辑
猥琐的小王 发表于 2021-9-24 11:47
那么我想把Test:的子键Name:直接作为账户名称,我该怎么获取这个 Name: ?
比如我换成
Test:

map 必须根据 key 获取 value。如果这个 key 是未知的(开发过程当中我并不知道实际的账户是 xiaowang、xiaoli 还是 xiaoming),使用 map 意义不大,更推荐使用数组。

  1. Test:
  2.   -
  3.     name: 'xiaowang'
  4.     enable: true
  5.     ...
  6.   -
  7.     name: 'xiaoming'
  8.     enable: true
  9.     ...
复制代码

  1. List<Map<String, Object>> accounts = getConfig().getList("Test");
  2. for (acc in accounts) {
  3.     String name = acc.get("name").toString();
  4.     getLogger().info("账号:" + name);
  5. }
复制代码

第一页 上一页 下一页 最后一页