BufferedWriter 没有将 Map 的内容写入文本文件;我的世界服务器
BufferedWriter is not writing contents of Map to text file; Minecraft server
我有 PVPStats 对象存储在 PlayerMeta.java:
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();
}
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.
最后,如果重要/有帮助,服务器启动时的reader:
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();
}
好的,所以有多个问题。我没有控制缓冲区的刷新,我错误地声明了 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();
}
我有 PVPStats 对象存储在 PlayerMeta.java:
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();
}
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.
最后,如果重要/有帮助,服务器启动时的reader:
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();
}
好的,所以有多个问题。我没有控制缓冲区的刷新,我错误地声明了 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();
}