【发布时间】: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);
});
源代码:
编辑
我刚刚使用 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