gpt4 book ai didi

java - 在 Java 中从文本文件中删除特定行

转载 作者:行者123 更新时间:2023-11-30 07:47:38 26 4
gpt4 key购买 nike

我正在建立一个等级系统,其中每个成员都有一个用户名和一个等级。该程序从文本文件中读取用户名和等级并将其分配给用户。每行一个用户名和排名,例如:

user1 1
user2 2
user3 3

我已经设置了一个程序来将用户名和等级添加到文本文件中,但是我似乎无法弄清楚如何从列表中删除特定用户,例如如果我只想删除用户 2 和他/她排名并保留其他两个,但重要的是之后不要留下空行。

这里是我如何将其写入文件的代码,仅供引用:

             try {
BufferedWriter out = new BufferedWriter(new FileWriter("stafflist.txt", true));
for (int i = 0; i < 1; i++) {
out.newLine();
out.write(target.getUsername() + " " + target.getRights());
}
out.close();
SerializableFilesManager.savePlayer(target);
if (loggedIn) {
target.getPackets().sendGameMessage(modString + Utils.formatPlayerNameForDisplay(member.getUsername()) + "!", true);}
member.getPackets().sendGameMessage(successString + Utils.formatMemberNameForDisplay(target.getUsername()) + " to a Moderator.",true);
loggedIn = false;
} catch (IOException e) {
System.out.println("GiveMod - Can't find stafflist.txt");
}
return true;

最佳答案

您无法从文件中间删除数据(不保留空值)。您至少需要重写其下面的内容。一个简单的解决方案是将所有内容加载到内存中,删除该行并再次转储集合

另一种解决方案是:

  1. RandomAccessFile 打开 FileChannel
  2. 逐行读取文件并保留行头的文件指针。 fileChannel.position();file.readLine(); 将之后的内容加载到集合中。从该位置 file.setLength(linePosition); 截断文件,然后将集合转储到文件末尾。

如果您的数据无法容纳在内存中,那么您可以使用临时文件而不是集合。创建一个temp-file File.createTempFile(...),逐行读取剩余数据并写入temp,截断原始文件,逐行读取temp并写到原来的。

或者,猜猜看,使用数据库。

关于java - 在 Java 中从文本文件中删除特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com