org.supercsv.exception.SuperCsvException:从行开始读取引用列时意外结束文件

时间:2014-08-22 19:58:45

标签: 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
        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;
        }

2 个答案:

答案 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的制作人投诉。