Java - 从文件中删除某些行

时间:2012-06-17 19:00:32

标签: java line filereader

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

    [ITEMS]

    [BANK]

    [FRIENDS]

    [EOF]

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

如果您需要更多信息,请与我们联系!

2 个答案:

答案 0 :(得分: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;
    }

}

答案 1 :(得分: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
...

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

如果您无法控制文件的格式,您需要一些区分行的方法,这将首先需要有关文件格式化方式的更详细信息。

如果您需要在Bank和Friends部分之间放置任何内容(如空行),只需在写入之间将一个由换行符(“\ n”)组成的字符串写入文件即可轻松完成银行和朋友部分提交。