【发布时间】:2015-10-03 01:35:23
【问题描述】:
我有一段看起来像这样的代码(在 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 already closed”
Input file:
Line1
Line2 //there is no empty line after this
这是 LineIterator 的已知行为吗? 请帮助我尝试理解为什么会这样。
更新:我在代码中没有看到 close() 或 LineIterator.closeQuietly(iterator)。这会导致问题吗?
【问题讨论】:
-
您是如何获得
LineIterator的? -
请公布全部相关代码,
lineIterator如何创建,令牌如何消费等。 -
我正在像这样创建它 LineIterator iterator = lineIterator(someFile, defaultCharset())。我也将它添加到问题中
-
我无法重现这个。
-
我查看了更多代码,为问题添加了更多细节。这是因为我将迭代器传递给另一个方法吗?