简体   繁体   English

如何删除Java中文本文件的最后一行?

[英]How do I remove the last line of a text file in Java?

I have a file that includes a few strings. 我有一个包含几个字符串的文件。 For example: 例如:

Mike1111 Mike1111
Chris2222 Chris2222
Brian3333 Brian3333

I am trying to write code to delete a line from that file. 我正在尝试编写代码来删除该文件中的一行。 However, when I delete Chris for example, it becomes: 但是,当我删除Chris时,它变为:

Mike1111 Mike1111
Brian3333 Brian3333
(blank line) (空行)

The blank line is a problem because when I add another string it will come after the blank line rather than in it's place. 空行是一个问题,因为当我添加另一个字符串时,它将在空白行之后而不是在它的位置。 Thank you in advance. 先感谢您。 Here is my code: 这是我的代码:

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.");

    }

}

This will do the trick, add one boolean check. 这将解决问题,添加一个布尔检查。

        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();

The problem here is that, with System.getProperty("line.separator") , you append a line at the end of temporaryFile even though no more lines comes in. Code below tries to avoid creating redundant end line: 这里的问题是,使用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);
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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