【问题标题】:Removing Nth line of File with BufferedReader/BufferedWriter使用 BufferedReader/BufferedWriter 删除文件的第 N 行
【发布时间】:2020-12-18 14:42:37
【问题描述】:

所以我有一个这样结构的文本文件(产品、价格、类别、数量)。

Apple
1.0
Fruits
120
Cucumber
1.4
Vegetables
110
Pear
1.6
Fruits
120

我需要一个可以删除第 N 项的函数,在这种情况下,第二项形成文件(即第 5、6、7、8 行),所以它看起来像这样:

Apple
1.0
Fruits
120
Pear
1.6
Fruits
120

我能找到的只是从文件中删除特定字符串的方法,但这不是我在这种情况下需要的。

编辑: 到目前为止,这是我的代码:

int place=2;            
try{
    File inputFile = new File("Cart.txt"); 
    File tempFile = new File("Cart1.txt"); 
    BufferedReader reader = new BufferedReader(new FileReader(inputFile));
    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

    int itemToRemove=place*4;
    String currentLine;
    int line=0;
    while((currentLine = reader.readLine()) != null) {
        if(line!=itemToRemove||line!=itemToRemove+1||line!=itemToRemove+2||line!=itemToRemove+3){
            writer.write(currentLine + System.getProperty("line.separator"));
        }
        line++;
    }
    writer.close();
    reader.close();
    tempFile.renameTo(inputFile);
}catch(Exception x){}

它应该从文件中删除第二个项目,但它只是复制一个

【问题讨论】:

  • 请向我们展示您的代码并详细说明问题所在。
  • 我猜这是作业所以你必须展示一些代码
  • 您也可以读取文件并删除项目并重写到同一文件
  • 使用 Files 类对每一行进行流式传输/循环并删除您需要的任何内容。
  • 我已经用代码更新了我的帖子

标签: java file


【解决方案1】:

您需要做的就是使用调试器运行您的代码,以发现您的if 条件不正确,并且递增line 应该是while 循环内执行的第一个操作。

这是您的代码以及我的更正。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class RemovNth {

    public static void main(String[] args) {
        int place = 2;
        try {
            File inputFile = new File("Cart.txt");
            File tempFile = new File("Cart1.txt");
            BufferedReader reader = new BufferedReader(new FileReader(inputFile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
            int itemToRemove = (place - 1) * 4;
            String currentLine;
            int line = -1;
            while ((currentLine = reader.readLine()) != null) {
                line++;
                if (line == itemToRemove || line == itemToRemove + 1 || line == itemToRemove + 2
                        || line == itemToRemove + 3) {
                    continue;
                }
                writer.write(currentLine + System.getProperty("line.separator"));
            }
            writer.close();
            reader.close();
            tempFile.renameTo(inputFile);
        }
        catch (Exception x) {
        }
    }
}

请注意,根据文档,方法 renameTo 可能会失败。

您的if 条件将始终为真。

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 2011-10-28
    • 2012-03-20
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2022-10-01
    • 2016-01-28
    • 1970-01-01
    相关资源
    最近更新 更多