Ошибка закрытия потока CsvParser

все. Я пытаюсь разобрать файл CSV с помощью CsvParser, но получаю сообщение об ошибке IOException: Stream Closed после чтения строки 57 (из ~ 6500). Кто-нибудь знает, что может быть причиной этого? Вот фрагмент кода и ошибка:

#!/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)

person Jess    schedule 27.06.2013    source источник


Ответы (1)


CsvParser ленив, поэтому читает строки по мере их запроса (вместо того, чтобы загружать их все в память.

Вызов withReader закрывает Reader после завершения закрытия.

Итак, когда вы пытаетесь сделать csvFile.each, поток закрывается.

Это должно работать:

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

    csvFile.each {
        println it
    }
}
person tim_yates    schedule 27.06.2013