簡體   English   中英

如何動態刪除文本文件中的行?

[英]How to remove lines dynamically from text file?

我正在為自己的習慣制作減少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();
}

我已將其更改為此,但發生相同的錯誤。

開始刪除底部到頂部的空白行。

或者,如果您從上到下開始,則可以遵循以下偽代碼:

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

由於我沒有看到分兩個階段執行此操作的理由,因此如何解決一個階段的問題。 這是一個可行的解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM