OpenCsv报错:com.opencsv.exceptions.CsvMalformedLineException
报错:com.opencsv.exceptions.CsvMalformedLineException: Unterminated quoted field at end of CSV line. Beginning of lost text: […]
//原代码
public static void main(String[] args) {
try (CSVReader reader = new CSVReader(new FileReader("path/to/your/csv/file.csv"))) {
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
}
} catch (IOException e) {
e.printStackTrace();
}
}
使用opencsv导入csv文件数据,出现该异常。查询各种ai和博客都没有解决方法
问题行是字符串文本包含逗号和空文本或者是单引号还是双引号,设置格式都无效
本来以为删除问题行会解决
但是删除后又报错:
cn.hutool.core.io.IORuntimeException: MalformedInputException: Input length = 1
搜索原因发现:是编码格式的问题,于是又修改编码格式,解决无果
CsvReader reader = CsvReader.builder()
.charset(CharsetUtil.forName("UTF-8")) // 设置编码格式为UTF-8
.file(ResourceUtil.getUtf8Reader("path/to/your/csv/file.csv")) // 替换为你的CSV文件路径
.build();
CsvReader reader = CsvReader.builder()
.charset(CharsetUtil.forName("GBK")) // 设置编码格式为GBK
.file(ResourceUtil.getUtf8Reader("path/to/your/csv/file.csv")) // 替换为你的CSV文件路径
.build();
没有用还是报错
回到问题本身(解决方式):
更改解析
RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build();
CSVReader reader = new CSVReaderBuilder(Files.newBufferedReader(Paths.get(path)))
.withCSVParser(rfc4180Parser)
.build();
参考博客:https://www.jb51.net/article/220711.htm