我正在使用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)
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; }
答案 0 :(得分:0)
异常表明它在80000行开始和结束的事实应该意味着该行上的引号数量不正确。
您应该使用以下CSV获得相同的错误(但例外情况将是第1行):
one,two,"three,four
由于第3列缺少尾随引号,因此Super CSV将到达文件的末尾,而不知道如何解释输入。
FYI here是来自项目源的此方案的相关单元测试。
您可以尝试删除行来查找罪魁祸首,只需记住CSV可以跨越多行,因此请务必删除整个记录。
答案 1 :(得分:0)
错误消息中显示的行不一定是有问题的行,因为不平衡的引用者会抛弃SuperCSV的行检测。
如果可能,请在电子表格问题中打开csv(例如libreoffice calc)并搜索(如在CTRL-F搜索中)查询引号char。
Calc通常会很好地导入文件,即使存在不匹配,但如果搜索它,您会在某处看到quotechar。然后检查csv是否正确转义。如果是,请确保SuperCSV知道它。如果不是,请向csv的制作人投诉。