【问题标题】:Remove a line in text file with java.BufferedReader使用 java.BufferedReader 删除文本文件中的一行
【发布时间】:2013-10-30 19:40:01
【问题描述】:

如何在 Java 中删除或修剪文本文件中的一行? 这是我的程序,但它不起作用。 我想删除文本文件中的一行,一行包含用户输入的单词

  try {
        File inputFile = new File("temp.txt");
        File tempFile = new File("temp1.txt");

        BufferedReader reader = new BufferedReader(new FileReader(inputFile));
        BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

        String lineToRemove = name;
        String currentLine;

        while((currentLine = reader.readLine()) != null)
        {
            //trim newline when comparing with lineToRemove
            String trimmedLine = currentLine.trim();
            if(!trimmedLine.startsWith(lineToRemove))
            {
                // if current line not start with lineToRemove then write to file
                writer.write(currentLine);
            }
        }
        writer.close();
        reader.close();
    }
    catch(IOException ex)
    {
        System.out.println("Error reading to file '" + fileName + "'");

    }

【问题讨论】:

  • 什么不起作用?乍一看,您的代码看起来相当正确。
  • 您正在剥离所有新行。 readLine() 不包含换行符,您也没有写任何内容。

标签: java


【解决方案1】:

您没有用换行符分隔行,因此生成的文件将只有一个长行。解决此问题的一种可能方法是在每行之后写行分隔符。

另一个可能的问题是您只检查当前行是否给定的字符串开头。如果你想检查 行是否包含 字符串,你应该使用contains 方法。

第三个问题是你写的不是修剪过的线,而是原来的线。您确实没有说出您对程序的期望,但如果您应该输出修剪后的行,它应该如下所示:

        if(!trimmedLine.contains(lineToRemove)) {
            writer.write(trimmedLine);
            writer.newLine();
        }

【讨论】:

    【解决方案2】:

    startsWith() 是罪魁祸首。您正在检查该行是否以“lineToRemove”开头。正如@Joni 建议的使用包含。

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2013-09-04
      相关资源
      最近更新 更多