繁体   English   中英

从Java中的文本文件删除特定行

[英]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

一种替代解决方案是:

  1. RandomAccessFile打开FileChannel
  2. 逐行读取文件,并保留行头的文件指针。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM