【问题标题】:How do I remove the last line of a text file in Java?如何在 Java 中删除文本文件的最后一行?
【发布时间】:2017-03-23 03:14:30
【问题描述】:

我有一个包含一些字符串的文件。 例如:

迈克1111
克里斯2222
布赖恩3333

我正在尝试编写代码以从该文件中删除一行。但是,例如,当我删除 Chris 时,它变为:

迈克1111
布赖恩3333
(空行)

空行是个问题,因为当我添加另一个字符串时,它会出现在空行之后而不是它的位置。先感谢您。这是我的代码:

public void deleteUser(String u, String p) throws IOException {
    username = u;
    pin = p;

    File userAccountFolder = new File("userLogin.txt");
    File temporaryFile = new File("temporaryFile.txt");

    BufferedReader buffReader = new BufferedReader(new FileReader(userAccountFolder));
    BufferedWriter buffWriter = new BufferedWriter(new FileWriter(temporaryFile));

    String lineToRemoveFromFile = username + pin;
    String lineFromUserFile;

    while ((lineFromUserFile = buffReader.readLine()) != null) {

        String trimmedLine = lineFromUserFile.trim();
        if (trimmedLine.equals(lineToRemoveFromFile)) {
          continue;
        }

        buffWriter.append(lineFromUserFile + System.getProperty("line.separator"));
    }
    buffWriter.close();
    buffReader.close();

    boolean removed = temporaryFile.renameTo(userAccountFolder);
    if (removed == true) {
        System.out.println(username + "'s account has been removed.");

    }

}

【问题讨论】:

  • 另外,当我说删除时,我的意思是它不包含在写入的新文件中——正如您在代码中看到的那样。
  • 请更改您的标题

标签: java file bufferedreader


【解决方案1】:

这样就可以了,添加一个布尔检查。

        BufferedReader buffReader = new BufferedReader(new FileReader(userAccountFolder));
        BufferedWriter buffWriter = new BufferedWriter(new FileWriter(temporaryFile));

        String lineToRemoveFromFile = username + pin;
        String lineFromUserFile;

        boolean addnewLine = false;

        while ((lineFromUserFile = buffReader.readLine()) != null) {

            String trimmedLine = lineFromUserFile.trim();
            if (trimmedLine.equals(lineToRemoveFromFile)) {
                continue;
            }

            if (addnewLine) {
                buffWriter.newLine();
            } else {
                addnewLine = true;
            }
            buffWriter.append(lineFromUserFile);

        }
        buffWriter.close();
        buffReader.close();

【讨论】:

    【解决方案2】:

    这里的问题是,使用System.getProperty("line.separator"),即使没有更多行进入,您也会在temporaryFile 的末尾追加一行。下面的代码试图避免创建多余的结束行:

        String lineFromUserFile = null;
        boolean needAddNewLine = false;
        while ((lineFromUserFile = buffReader.readLine()) != null) {
            if (!lineFromUserFile.trim().equals(lineToRemoveFromFile)) {
                if (needAddNewLine) {
                    buffWriter.newLine();
                }
                needAddNewLine = true;
                buffWriter.write(lineFromUserFile);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多