【问题标题】:BufferedWriter is not writing contents of Map to text file; Minecraft serverBufferedWriter 没有将 Map 的内容写入文本文件;我的世界服务器
【发布时间】:2021-04-13 02:15:47
【问题描述】:

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

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

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

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

除了 Map 对象,PlayerMeta.java 中还有从 Map 更新和检索 PVPStats 对象的方法。这些都在工作。

不工作的部分是写方法:

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();
    }

onDisable() 完成后的kill.txt:

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 文件类型尝试了此操作,并且 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();
    }

【问题讨论】:

  • 你是否已经尝试过 flush() 了?
  • close() 天生会刷新,不可能是这样,@MNEMO。
  • 嗯。对。谢谢。 @rzwitserloot。
  • @DogeCode,您确定您的“*.db”文件是纯文本而不是数据库文件吗?
  • 对此进行了更新以反映进度。我将密钥写入文件而不是解析的对象,但现在它至少写了这样是的.. 现在是 .txt @MNEMO

标签: java file-writing bufferedwriter


【解决方案1】:

好的,所以有多个问题。我没有控制缓冲区的刷新,我错误地声明了 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();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2017-08-04
    • 2017-10-01
    相关资源
    最近更新 更多