我有这样的平面文件:
[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的新手。如果您有任何线索或建议,请告诉我。谢谢你的时间。
答案 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();