2

全部。我正在尝试使用 CsvParser 解析 CSV 文件,但在第 57 行(约 6500 行)读取后出现 IOException: Stream closed 错误。有谁知道这可能是什么原因造成的?这是一个代码片段和错误:

#!/usr/bin/ groovy

package csvTest

@Grab ('com.xlson.groovycsv:groovycsv:1.0')
import com.xlson.groovycsv.CsvParser

def csvFile = new File("file.csv").withReader {
    CsvParser.parseCsv(it)
}

csvFile.each {
    println it
}

Caught: java.io.IOException: Stream closed
java.io.IOException: Stream closed
    at au.com.bytecode.opencsv.CSVReader.getNextLine(CSVReader.java:245)
    at au.com.bytecode.opencsv.CSVReader.readNext(CSVReader.java:212)
    at au.com.bytecode.opencsv.CSVReader$readNext.call(Unknown Source)
    at com.xlson.groovycsv.CsvIterator.hasNext(CsvIterator.groovy:72)
    at csvTest.CsvTest.run(CsvTest.groovy:12)
4

1 回答 1

2

是惰性的CsvParser,因此在请求时读取行(而不是将它们全部加载到内存中。

一旦关闭完成,withReader调用就会关闭。Reader

所以当你尝试做csvFile.each时,流是关闭的。

这应该有效:

new File("file.csv").withReader {
    def csvFile = CsvParser.parseCsv( it )

    csvFile.each {
        println it
    }
}
于 2013-06-27T15:11:37.407 回答