0

我有一个类尝试使用 Apache Common CSV 读取 CSV 文件,到目前为止,我的代码工作正常,只是没有得到预期的结果。我的代码显示 csv 文件中第二列的副本,如下所示:

support@gmail.com
google
google.com
support@gmail.com
google
tutorialspoint
info@tuto.com
google

我的 CSV 文件

Name,User Name,Password
google.com,support@gmail.com,google
tutorialspoint,info@tuto.com,google

我希望得到这样的东西:

google.com
support@gmail.com
google
tutorialspoint
info@tuto.com
google

这是我使用 Apache CSV 解析 csv 的块

public List<String> readCSV(String[] fields) {
        // HERE WE START PROCESSING THE READ CSV CONTENTS
        List<String> contents = new ArrayList<String>();
        FileReader fileReader = null;
        CSVParser csvFileParser = null;

        // HERE WE START PROCESSING
        if(fields!=null){
            //Create the CSVFormat object with the header mapping
            CSVFormat csvFileFormat = CSVFormat.DEFAULT.withHeader(FILE_HEADER_MAPPING);

            try {

                //Create a new list of student to be filled by CSV file data
                List<String> content=new ArrayList<String>();

                //initialize FileReader object
                fileReader = new FileReader(FilePath);

                //initialize CSVParser object
                csvFileParser = new CSVParser(fileReader, csvFileFormat);

                //Get a list of CSV file records
                List<CSVRecord> csvRecords = csvFileParser.getRecords(); 

                //Read the CSV file records starting from the second record to skip the header
                for (int i = 1; i < csvRecords.size(); i++) {
                    CSVRecord record = csvRecords.get(i);
                    //Create a new student object and fill his data
                    for(int j=0; j<fields.length; j++){
                        content.add(record.get(fields[j]));
                    }
                    // Here we submit to contents
                    contents.addAll(content);
                    System.out.println(contents.size());
                } // end of loop
            } 
            catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    fileReader.close();
                    csvFileParser.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
            // Here we return
            return contents;
        }

我无法弄清楚这里缺少什么,欢迎任何帮助。

4

1 回答 1

0

原因是您content每次迭代都添加字符串列表

                contents.addAll(content);

content要么在每次迭代中清除 ,要么只是改变

                    content.add(record.get(fields[j]));

                    contents.add(record.get(fields[j]));

并删除

                contents.addAll(content);

线

于 2018-07-31T22:22:51.420 回答