Java CSVReader将多条生产线视为一条生产线

Java CSVReader将多条生产线视为一条生产线,java,file,csv,lines,Java,File,Csv,Lines,我正在使用au.com.bytecode.opencsv.CSVReader读取csv文件并逐个打印所有记录。代码的行为很奇怪。它正确地打印了一些初始行。但是,在这之后,它会将一组行一起打印为一行。然后它再次正确地打印下一组行。我已经检查了CSV文件,没有发现文件本身存在任何问题 csvReader reader = new CSVReader(new FileReader(fileNameWithLocation), ',', '\"', 1); ColumnPositionMa

我正在使用au.com.bytecode.opencsv.CSVReader读取csv文件并逐个打印所有记录。代码的行为很奇怪。它正确地打印了一些初始行。但是,在这之后,它会将一组行一起打印为一行。然后它再次正确地打印下一组行。我已经检查了CSV文件,没有发现文件本身存在任何问题

     csvReader reader = new CSVReader(new FileReader(fileNameWithLocation), ',', '\"', 1);

 ColumnPositionMappingStrategy<DomainObj> mappingStrategy = 
                            new ColumnPositionMappingStrategy<DomainObj>();

         mappingStrategy.setType(DomainObj.class);      

          String[] nextLine;

            while ((nextLine = csvReader.readNext()) != null) 
            {
                    if (nextLine != null) 
                    log.debug("Next line : " + Arrays.toString(nextLine));
            }

看起来您在使用适当的格式(行尾、转义等)配置解析器时遇到了问题。在大多数情况下,它可以自动检测格式,速度也是opencsv的4倍。请尝试以下代码:

CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();

CsvParser parser = new CsvParser(settings);
parser.beginParsing(fileNameWithLocation);

String nextLine[];
while ((nextLine = parser.parseNext()) != null){
    //do stuff
}
希望这有帮助


免责声明:我是这个图书馆的作者。它是开源和免费的(Apache 2.0许可证)

您的CSV可能会出现一些问题。可能是缺少一些CR/LF字符。是的。检查是否使用“\r\n”或“\n”作为每行的行尾。谢谢。但是我应该如何检查呢?我已经用高级文本编辑器检查过了。每行上都有CR和LF字符。但是,当我使用CSVReader打印CSV记录并在文本编辑器中打开该日志时,它显示这些行的CR已被删除。我不知道为什么。你有没有可能在dropbox或驱动器上上传一个样本(每组2行就足够了)文件以供检查?谢谢@Jeronimo Backes。我会试试这个,让你知道会发生什么。另外,您是否愿意对我在对我的问题的最后第二次评论中提出的问题发表评论?
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();

CsvParser parser = new CsvParser(settings);
parser.beginParsing(fileNameWithLocation);

String nextLine[];
while ((nextLine = parser.parseNext()) != null){
    //do stuff
}