-5

我正在尝试从文件中删除某些行。我的文件是一个 .txt,它看起来像这样:

    [ITEMS]

    [BANK]

    [FRIENDS]

    [EOF]

当我的程序运行时,它会在这个文件中写入行。现在我想做的是有一个方法,当我调用它时,它将删除[BANK] 和 [FRIENDS]之间的所有行。它不能删除任何其他内容。留下一个空行。

如果您需要更多信息,请告诉我!

4

2 回答 2

1

这是部分完成的代码,向您展示必须做什么的想法,但它可能有一些缺陷,它使用 Google Guava - http://code.google.com/p/guava-libraries/

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import com.google.common.io.Files;

public class LinesDeleter {
    private static boolean between;

    public static void main(String[] args) throws IOException {

        File file = new File("somePath");
        deleteLinesBetweenFromFile("line1", "line2", file);

    }

    private static void deleteLinesBetweenFromFile(String start, String end,
            File file) throws IOException {
        List<String> readLines = null;
        List<String> newLines = new ArrayList<String>();
        Charset charset = Charset.defaultCharset();

        readLines = Files.readLines(file, charset);

        if (readLines != null) {
            for (String line : readLines)
                if ( !isBetweenBannedLines(line, start, end))
                    newLines.add(line);
            File to = new File("somefile");
            Files.write(writeAsSingleLines(newLines), to, charset);
        }

    }

    private static CharSequence writeAsSingleLines(List<String> newLines) {
        // TODO Auto-generated method stub
        return null;
    }

    private static boolean isBetweenBannedLines(String line, String start,
            String end) {
        if (line.equals(start)) {
            between = true;
            return true;
        }
        if (line.equals(end)) {
            between = false;
            return true;
        }
        if (between)
            return true;
        return false;
    }

}
于 2012-06-17T19:24:31.453 回答
0

您需要做的(如果您还没有做的话)是有一些文件内标记来识别字段(例如 [BANK] 或 [FRIENDS])何时开始或结束。如果您像这样格式化文件:

#Start Bank Section
<some bank data>
<some more bank data>
#End Bank Section
<junk you want to get rid of>
<more junk you want to get rid of>
<even more junk you want to get rid of>
#Start Friends Section
...

然后您可以编写一个函数来读取每个部分并将其转换为字符串,然后您可以根据需要将其输出到新的或覆盖的文件中。

如果您无法控制文件的格式,则需要某种方式来区分行,这首先需要有关文件格式的更详细信息。

如果您需要在 Bank 和 Friends 部分之间放置任何内容(例如空行),您只需在写入 Bank 和 Friends 之间的文件中写入一个由换行符(“\n”)组成的字符串即可非常轻松地做到这一点要归档的朋友部分。

于 2012-06-17T19:15:20.583 回答