如何从文本文件中动态删除行?

时间:2014-04-07 09:33:36

标签: java io

我正在制作应用程序,以减少我自己的风俗txt文件。我发现了无法解决的问题。 我有两个arraylist与行之间的位置我要删除文本。问题是该函数计算所有所需的行并将其添加到arraylist。因此,如果我删除第52行,第62行(下一行)将是第61行,依此类推。我怎么解决这个问题?

这是我的功能:

    public void countDesiredLines() throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(
            "D:\\Temp.txt"));

    int lines = 0;

    boolean has_it = false;
    String line = null;
    while ((line = reader.readLine()) != null) {
        lines++;
        if (has_it == true) {
            has_it = false;
            if ("".equals(line)) {
                position.add(lines);

            }
        }
        if (line.startsWith("[Content]")) {
            has_it = true;

        }
    }
    reader.close();
}

我已将其更改为此但发生了同样的错误。

2 个答案:

答案 0 :(得分:0)

开始从下到上删除空白行。

或 如果你从上到下开始,你可以遵循这个伪代码:

1) counter=0
2) while a line is available for removal, delete (line_no - counter)th line
3) counter++;
4) goto 2.

答案 1 :(得分:0)

由于我没有看到分两个阶段做到这一点的理由,一个单阶段解决方案怎么样。 这是一个解决方案:

import java.io.*;

public class Test {

    private static final String lineSeparator = System.lineSeparator();

    public void removeBadLinesFromFile(String filename) throws IOException {
        StringBuilder sb = new StringBuilder();

        BufferedReader br = new BufferedReader(new FileReader(filename));

        boolean content = false;
        String line = null;

        while ((line = br.readLine()) != null) {
            if (content) {
                content = false;

                if (line.isEmpty()) {
                    // skip this line, and the next three
                    br.readLine();
                    br.readLine();
                    br.readLine();

                    continue;
                }

            }

            if (line.startsWith("[Content]"))
                content = true;

            sb.append(line);
            sb.append(lineSeparator);
        }

        br.close();

        FileWriter fw = new FileWriter(filename);
        fw.write(sb.toString());
        fw.close();
    }

    public static void main(String... args) throws IOException {
        Test test = new Test();
        test.removeBadLinesFromFile("Test.txt");
    }
}