[Solved] Converting HashMap<String, Integer> to file and back again.

Discussion in 'Plugin Development' started by DKDunnings, Sep 19, 2011.

Thread Status:
Not open for further replies.
  1. Offline

    DKDunnings

    I am trying to write to hashmap from a configuration file (setupBank()) and also write to config file from hashmap (updatebank()). Please Help. Greatly appreciated.

    Here's the code:
    PHP:
        public static void setupBank(){
            
    File tempFile = new File(config.bank_file);
            if(!
    tempFile.exists()){
                try {
                    
    tempFile.createNewFile();
                } catch (
    IOException ex) {}
            }
            
    //Loop through file and put all in hashmap
            
    bankFile.load();
            List<
    Stringkeys bankFile.getKeys();
            
    Iterator iter keys.iterator();
            while (
    iter.hasNext()){
                
    hashMap.put(iter.next().toString(), bankFile.getInt((String)iter.next(), 0));
            }
            
    bankFile.save();
        }
        public static 
    void updateBank(){
            
    bankFile.load();
            
    Set<Stringkeys hashMap.keySet();
            
    Iterator iter keys.iterator();
            while (
    iter.hasNext()){
                
    bankFile.setProperty((String)iter.next(), hashMap.get((String)iter.next()));
            }
            
    bankFile.save();
        }
    Here's the error I get:
    Code:
    java.util.NoSuchElementException
            at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
            at java.util.HashMap$KeyIterator.next(Unknown Source)
            at mcp.wealth.bank.updateBank(bank.java:35)
            at mcp.wealth.main.onDisable(main.java:30)
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:128)
            at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:906)
            at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:294)
            at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:287)
            at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:315)
            at org.bukkit.craftbukkit.CraftServer.reload(CraftServer.java:381)
            at org.bukkit.Bukkit.reload(Bukkit.java:173)
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:22)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:163)
            at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:353)
            at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:349)
            at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:499)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:478)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:374)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:417)
     
  2. Offline

    hatstand

    I think you're over-complicating things a bit here. This is how I'm loading/saving users in my banking plugin:
    Loading:
    Code:java
    1. for(String s : config.getKeys("users"))
    2. {
    3. users.put(s, config.getString("users." + s + ".bank"));
    4. }

    Saving:
    Code:java
    1. for(String s : users.keySet())
    2. {
    3. config.setProperty("users." + s + ".bank", users.get(s));
    4. }
    5. config.save();


    No idea how these work out performance-wise, that was never a concern for me. But they work.
     
    DKDunnings likes this.
  3. Offline

    DKDunnings

    mr hatstand, I take my hat off to you sir. Problem solved.
     
  4. Offline

    Shamebot

    You were calling .next() twice, but .hasNext() only once.
     
  5. Offline

    DKDunnings

    I never really thought that .next() actually called the next (Thought it just got the value for the next). That is where that code went wrong. Ah well, hatstand's method worked fine. :)
     
Thread Status:
Not open for further replies.

Share This Page