2014-04-06 43 views
0

我有平面文件是這樣的:如何計算空行的位置?

[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 

我想刪除[文件]聲明,其中內容是空的。我試圖通過檢查行有字符串「[Content]」,然後是下一行是空的。然後我想行(行號,其中行後空「[內容]」)的數量,然後將其添加到列表。具有空的[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新。如果你有任何線索或建議,請讓我知道。謝謝你的時間。

回答

1

要調用readLine()兩次,每次迭代,所以你會讀到文件的結尾。變化:

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

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

此外,您呼叫reader.close()內循環。您必須將其移至循環外部才能使邏輯工作。

0

reader.close().關閉讀者while循環,其結果是,在接下來的循環中,發生IOException。

你可能想要把它外循環

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