如何计算空行的位置?

时间:2014-04-06 13:29:23

标签: java io

我有这样的平面文件:

[Doc]
Date=14.01.15
Symbol=MUKA
[Content]
[Pos1]
Name=Muka2,0 0,9L ML

[Doc]
Date=14.01.15
Symbol=MUKA
[Content]

[Doc]
Date=14.01.15
Symbol=MUKA
[Content]
[Pos1]
Name=Muka2,0 0,9L ML

我想删除内容为空的[Doc]语句。我试图通过检查行有字符串" [内容]"来尝试这样做。然后下一行是空的。然后我想获得行数(&#34之后行为空的行数; [内容]")然后将其添加到列表中。空[Content]部分的[Doc]总是有4行。因此,当我得到[内容]位置时,我可以从中减去4并删除位置和位置-4之间的线。

执行后的文件必须如下所示:

[Doc]
Date=14.01.15
Symbol=MUKA
[Content]
[Pos1]
Name=Muka2,0 0,9L ML

[Doc]
Date=14.01.15
Symbol=MUKA
[Content]
[Pos1]
Name=Muka2,0 0,9L ML

我试图用功能来做这件事:

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

    int lines = 0;

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

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

        }

        reader.close();

        System.out.println("Wartość pod: " + pozycje.size());
        // for (int i = 0; i < pozycje.size(); i++) {
        // System.out.println("Wartość pod: "+ pozycje.get(i).toString());
        // }
    }
}

我有错误:

Wartość pod: 0
java.io.IOException: Stream closed
at java.io.BufferedReader.ensureOpen(BufferedReader.java:115)
at java.io.BufferedReader.readLine(BufferedReader.java:310)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at TextFormatter.countDesiredLines(TextFormatter.java:190)
at TextFormatter.main(TextFormatter.java:51)

我是java的新手。如果您有任何线索或建议,请告诉我。谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

每次迭代都要调用readLine()两次,因此您将读取文件末尾的内容。变化:

while (reader.readLine() != null) {
    lines++;
    String line = reader.readLine();

String line = null;
while ((line = reader.readLine()) != null) {
    lines++;

此外,您在循环内调用reader.close()。您必须将其移到循环外部才能使逻辑起作用。

答案 1 :(得分:0)

你在while循环中用reader.close().关闭了读者,结果,在下一个循环中,发生了IOException。

您可能希望将其置于循环之外

while(){
...
}
reader.close();