微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BufferedWriter 不会将 Map 的内容写入文本文件;我的世界服务器

如何解决BufferedWriter 不会将 Map 的内容写入文本文件;我的世界服务器

我在 PlayerMeta.java 中存储了 PVPStats 对象:

public static Map <UUID,PVPstats> sPVPStats = new HashMap<>();

我确信地图中填充了包含每个 uuid 的预期变量的对象。

当服务器在 Main.java 中调用 ondisable() 时,我试图将这些对象(转换为单行字符串)写入 plugins/core/killstats.txt

与 Map 对象一起,PlayerMeta.java 中还有从 Map 更新和检索 PVPStats 对象的方法。这些都有效。

不工作的部分是write方法

public static void writePVPStats() throws IOException {
        
        BufferedWriter w = new BufferedWriter(new FileWriter("plugins/core/killstats.txt"));
        
        sPVPStats.keySet().forEach(user -> {            
            try {
                System.out.println(sPVPStats);
// stdout = {a6b6e3a1-a1ec-4fee-9d6d-f5e495c3e9d7=a6b6e3a1-a1ec-4fee-9d6d-f5e495c3e9d7:1:0}
                
                w.write(user.toString() + "\n");
                w.flush();
                
              } catch (IOException e) {
                  throw new UncheckedioException(e);
              }
        });
        w.close();
    }

kill.txt ondisable() 完成后:

a6b6e3a1-a1ec-4fee-9d6d-f5e495c3e9d7

相反,它必须是:

{a6b6e3a1-a1ec-4fee-9d6d-f5e495c3e9d7=a6b6e3a1-a1ec-4fee-9d6d-f5e495c3e9d7:1:0}

供参考,here is the complete PVPStats class

最后,如果它重要/有帮助,服务器启动时的读者:

Files.readAllLines(killstats_user_database.toPath()).forEach(line -> {
            PVPstats stats = PVPstats.fromString(line);
            PlayerMeta.sPVPStats.put(stats.playerid,stats);
        });

代码

backend.FileManager.java

backend.PlayerMeta.java

backend.PVPstats.java

events.PVP.java

编辑

我刚刚尝试使用 killstats.txt 文件类型 nad killstats.txt 现在没有任何内容

public static void writePVPStats() throws IOException {
        
        BufferedWriter w = new BufferedWriter(new FileWriter("plugins/core/killstats.txt"));
        
        for (PVPstats object: sPVPStats.values()) {
            try {
                System.out.println(sPVPStats);
                
                w.write(object.toString() + "\n");
                w.flush();
                
              } catch (IOException e) {
                  throw new UncheckedioException(e);
              }
        };
        w.close();
    }

解决方法

好的,所以有多个问题。我没有控制缓冲区的刷新,我错误地声明了 hasmap,我没有访问哈希映射的值部分,我没有正确强制执行纯文本。

解决方案

public static Map <UUID,PVPstats> sPVPStats = new HashMap<UUID,PVPstats>();
    public static void writePVPStats() throws IOException {
        
        BufferedWriter w = new BufferedWriter(new FileWriter("plugins/core/killstats.txt"));
        
        for (PVPstats object: sPVPStats.values()) {
            try {
                System.out.println(sPVPStats);
                System.out.println(object.toString());
                
                w.write(object.toString() + "\n");
                w.flush();
                
              } catch (IOException e) {
                  throw new UncheckedIOException(e);
              }
        };
        w.close();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。