org.supercsv.exception.SuperCsvException:读取第行开始的带引号的列时,文件意外结束

org.supercsv.exception.SuperCsvException:读取第行开始的带引号的列时,文件意外结束,csv,supercsv,Csv,Supercsv,我正在使用superCSV阅读器读取csv文件,出现以下异常。该文件有80000行。当我删除结束行时,异常仍然会发生,所以文件中的某些行导致了这个问题。我该如何解决这个问题 org.supercsv.exception.SuperCsvException: unexpected end of file while reading quoted column beginning on line 80000 and ending on line 80000 context=null

我正在使用superCSV阅读器读取csv文件,出现以下异常。该文件有80000行。当我删除结束行时,异常仍然会发生,所以文件中的某些行导致了这个问题。我该如何解决这个问题

org.supercsv.exception.SuperCsvException: unexpected end of file while reading quoted column beginning on line 80000 and ending on line 80000 context=null at org.supercsv.io.Tokenizer.readColumns(Tokenizer.java:198) at org.supercsv.io.AbstractCsvReader.readRow(AbstractCsvReader.java:179) at org.supercsv.io.CsvListReader.read(CsvListReader.java:69) at csv.filter.CSVFilter.filterFile(CSVFilter.java:400) at csv.filter.CSVFilter.filter(CSVFilter.java:369) at csv.filter.CSVFilter.main(CSVFilter.java:292) org.supercsv.exception.SuperCsvException:在读取从第80000行开始到第80000行结束的引用列时,文件意外结束 上下文=空 位于org.supercsv.io.Tokenizer.readColumns(Tokenizer.java:198) 在org.supercsv.io.AbstractCsvReader.readRow(AbstractCsvReader.java:179)上 位于org.supercsv.io.CsvListReader.read(CsvListReader.java:69) 位于csv.filter.CSVFilter.filterFile(CSVFilter.java:400) 位于csv.filter.CSVFilter.filter(CSVFilter.java:369) 位于csv.filter.CSVFilter.main(CSVFilter.java:292) ICsvListReader=null; 字符串[]行=null; ListlineList=null; 试一试{ reader=新的CsvListReader(新的文件读取器(inputFile),CsvPreference.STANDARD_首选项); 而((lineList=reader.read())!=null){ line=lineList.toArray(新字符串[lineList.size()]); } }捕获(异常扩展){ exp.printStackTrace(); 错误=真; }
异常声明在第80000行开始和结束,这意味着该行的引号数量不正确

您应该会在以下CSV中得到相同的错误(但异常将显示第1行):

因为第三列缺少尾随的引号,所以超级CSV将到达文件的末尾,并且不知道如何解释输入

FYI是来自项目来源的该场景的相关单元测试


您可以尝试删除行以找到罪魁祸首,但请记住CSV可以跨越多行,因此请确保删除整个记录。

错误消息中显示的行不一定是有问题的行,因为不平衡的引号会导致SuperCSV的行检测失败

如果可能,在电子表格问题中打开csv(例如libreoffice calc)并搜索(如在CTRL-F搜索中)引号字符

Calc通常会很好地导入文件,即使存在不匹配,但如果搜索它,您会在某处看到quotechar。然后检查csv是否正确转义。如果是,确保SuperCSV知道。如果不是,向csv的制作人投诉

ICsvListReader reader = null; String[] line=null; ListlineList=null; try{ reader = new CsvListReader(new FileReader(inputFile), CsvPreference.STANDARD_PREFERENCE); while((lineList=reader.read())!=null){ line=lineList.toArray(new String[lineList.size()]); } }catch(Exception exp){ exp.printStackTrace(); error=true; }
one,two,"three,four