我有一段看起来像这样的代码(在java中),它使用org.apache.commons.io.IOUtils.lineIterator;
LineIterator iterator = lineIterator(someFile, defaultCharset());
....
while(iterator.hasNext){
process(iterator);
}
private String process(LineIterator iterator, SomeComplexClass someClass){
while(iterator.hasNext()){
//do something using iterator.nextLine()
}
}
如果输入文件的最后一行是空的,那么这很有效。
Input file:
Line1
Line2
(nothing here. just empty line)
但如果我的输入文件没有空行,那么lineIterator.hasNext()会抛出异常,说“java.lang.IllegalStateException:Stream has closed”
Input file:
Line1
Line2 //there is no empty line after this
这是LineIterator的已知行为吗? 请帮我试着理解为什么会这样。
更新:我在代码中没有看到close()或LineIterator.closeQuietly(iterator)。这会导致问题吗?
答案 0 :(得分:0)
在文本编辑器中打开文件读取,可以显示像记事本++这样的行号 然后如果最后一行是空的。删除最后一行。
空格并不意味着没有行
答案 1 :(得分:-1)
如果你看一下LineIterator hasNext()LineIterator, 它似乎有一个bug。要工作,它应该在到达文件末尾时将cachedLine设置为null,而是仅设置“已完成”标志。不幸的是,在方法开始时,在完成标志之前检查cachedLine,因此即使到达文件末尾也会生效。