[英]Deleting a specific line from a text file in Java
我正在建立一个等级系统,其中每个成员都有一个用户名和一个等级。 该程序从文本文件中读取用户名和等级,并将其分配给用户。 每行一个用户名和排名,例如:
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;
您不能从文件中间删除数据(不保留nulls
)。 您至少需要重写其下的内容。 一个简单的解决方案是将所有内容加载到内存中,删除该行,然后再次转储该collection
。
一种替代解决方案是:
RandomAccessFile
打开FileChannel
fileChannel.position();file.readLine();
将之后的内容加载到集合中。 从该位置文件截断文件file.setLength(linePosition);
然后将collection
转储到文件末尾。 如果您的数据不适合存储在内存中,则可以使用temp file
而不是集合。 创建一个temp-file
File.createTempFile(...)
,逐行读取剩余数据并写入temp,截断原始文件,逐行读取temp并写入原始文件。
或者,猜猜怎么用数据库。
您的for循环中似乎有一个问题。 它在0和1之间循环,所以我认为您发布的输出不正确。 无论如何,如果只想打印某些行,则可以按以下方式对其进行过滤:
for (int i = 0; i < 1; i++) {
if(!target.getUsername().equals("user2")){
out.newLine();
out.write(target.getUsername() + " " + target.getRights());
}
}
将文件读入某个Collection中,删除所需的用户,然后使用修改后的Collection重写该文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.