1.11 Java Spigot/Bukkit 编程 - 将 HashMap 保存/加载到 Config.yml
1.11 Java Spigot/Bukkit programming - Save / Load HashMap into Config.yml
我在 HashMap 中为每个玩家计算了一个分数:
public Map<String, Integer> PScore = new HashMap<String, Integer>();
现在我想在 Config.yml 中保存和加载 HashMap。该配置已存在并且正在用于其他变量。
这是我解决问题的多次尝试:
public void saveHash()
{
for (String string : PScore.keySet())
{
this.getConfig().set("score.pscore", string);
this.saveConfig();
}
}
public void loadHash()
{
}
但在配置中我只得到:
score:
pscore: JackerNils
加载函数是空的,所以加载时当然没有任何反应。保存和加载功能由 onEnable() 和 onDisable()
控制
//编辑:
public Map<String, Integer> PScore = new HashMap<String, Integer>();
public void saveHash()
{
List<String> s = this.getConfig().getStringList("PScore");
for(String str : PScore.keySet())
{
s.add(str + ":" + PScore.get(str));
}
this.getConfig().set("PScore", s);
this.saveConfig();
}
public void loadHash()
{
List<String> s = this.getConfig().getStringList("PScore");
for(String str: s)
{
String words[] = str.split(":");
PScore.put(words[0], Integer.parseInt(words[1]));
}
}
这个方法现在工作正常,但看看配置做了什么:
PScore:
- JackerNils:5
- JackerNils:19
所以你看到了吗?它没有覆盖它,而是重复。
问题是 saveConfig
,它所做的是在每次循环执行后保存并覆盖您正在执行的当前文件,导致在循环完成后仅保存 hashmap 中的一个值。您可以做的是在设置所有值后保存配置,如下所示:
for (String string : PScore.keySet())
{
this.getConfig().set("score.pscore", string);
}
this.saveConfig();
另请记住,您要将所有值添加到配置中的同一部分。改为保存一个数组。
我在 HashMap 中为每个玩家计算了一个分数:
public Map<String, Integer> PScore = new HashMap<String, Integer>();
现在我想在 Config.yml 中保存和加载 HashMap。该配置已存在并且正在用于其他变量。
这是我解决问题的多次尝试:
public void saveHash()
{
for (String string : PScore.keySet())
{
this.getConfig().set("score.pscore", string);
this.saveConfig();
}
}
public void loadHash()
{
}
但在配置中我只得到:
score:
pscore: JackerNils
加载函数是空的,所以加载时当然没有任何反应。保存和加载功能由 onEnable() 和 onDisable()
控制//编辑:
public Map<String, Integer> PScore = new HashMap<String, Integer>();
public void saveHash()
{
List<String> s = this.getConfig().getStringList("PScore");
for(String str : PScore.keySet())
{
s.add(str + ":" + PScore.get(str));
}
this.getConfig().set("PScore", s);
this.saveConfig();
}
public void loadHash()
{
List<String> s = this.getConfig().getStringList("PScore");
for(String str: s)
{
String words[] = str.split(":");
PScore.put(words[0], Integer.parseInt(words[1]));
}
}
这个方法现在工作正常,但看看配置做了什么:
PScore:
- JackerNils:5
- JackerNils:19
所以你看到了吗?它没有覆盖它,而是重复。
问题是 saveConfig
,它所做的是在每次循环执行后保存并覆盖您正在执行的当前文件,导致在循环完成后仅保存 hashmap 中的一个值。您可以做的是在设置所有值后保存配置,如下所示:
for (String string : PScore.keySet())
{
this.getConfig().set("score.pscore", string);
}
this.saveConfig();
另请记住,您要将所有值添加到配置中的同一部分。改为保存一个数组。