[英]Jackson CsvMapper reads only the first line
I want to read csv file to List of strings.我想将 csv 文件读取到字符串列表。 I also want it to trim whitespaces and allow trailing comma.我还希望它修剪空格并允许尾随逗号。 My csv file looks like this:我的 csv 文件如下所示:
abcdefghijklmno ,
pqrstuwzabcdefh,
ijklmnopqrstuwyz,
zabcdefghijklmopqr,
And when I try to parse it using my method:当我尝试使用我的方法解析它时:
fun parseCsv(inputStream: InputStream): List<String> {
val mapper = CsvMapper().enable(CsvParser.Feature.TRIM_SPACES).enable(CsvParser.Feature.ALLOW_TRAILING_COMMA)
val schema = CsvSchema
.emptySchema()
.withLineSeparator("\n")
.withColumnSeparator(',')
.withQuoteChar('"')
return try {
mapper
.readerFor(String::class.java)
.with(schema)
.readValues<String>(inputStream)
.readAll()
} catch (e: IOException ) {
logger.error("Error parsing file", e)
emptyList()
} catch (e: NoSuchElementException) {
throw FileParsingError(e)
}
}
I get:我得到:
expected == actual
| | |
| | [abcdefghijklmno, ]
| false
[abcdefghijklmno, pqrstuwzabcdefh, ijklmnopqrstuwyz, zabcdefghijklmopqr]
How to fix it ?如何解决?
This worked for me:这对我有用:
return mapper.readerForListOf(Map.class)
.with(schema)
.with(CsvParser.Feature.WRAP_AS_ARRAY) // <-- This.
.readTree(content);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.