首页 > 解决方案 > CSV 日期到 arraylist_Java

问题描述

CSV 文件

我正在尝试使用 ArrayList 单独保存数据。但是,将一个数据保存到数组中后,它会跳过一行然后保存数据。请帮我解决这个问题。

private void readCSVFile(String tickerCode, File file) {
    System.out.println("Reading file " + tickerCode);
    System.out.println(file.getPath());
    try {
        ArrayList<List<String>> line = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader(file));
        CSVReaderHeaderAware csvReader = new CSVReaderHeaderAware(br);
        int numLine = 0;
        String[] values;
        while ((values = csvReader.readNext()) != null) {
            ArrayList<String> data = new ArrayList<>();
            data.add(values[0]);
            data.add(values[1]);
            data.add(values[2]);
            data.add(values[3]);
            data.add(values[4]);
            data.add(values[5]);
            data.add(values[6]);
            line.add(data);

            if(numLine == 0){
                System.out.print("StartDate = "+ values[0]);
            }
            if((csvReader.readNext() == null)){
                System.out.println(" EndDate = " + values[0]);
            }
            ++numLine;
        }

调试器变量

标签: javacsvarraylist

解决方案


如评论中所述,您也不能csvReader.readNext()在循环内使用来检查下一个元素是否为null,因为它实际上会读取下一行。因此,您可以做的是将最后处理的行的日期保存在变量中,然后在 while 循环完成后将其打印为 EndDate。

ArrayList<List<String>> line = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader(file));
CSVReaderHeaderAware csvReader = new CSVReaderHeaderAware(br);
int numLine = 0;
String[] values;
String endDate = null;
while ((values = csvReader.readNext()) != null) {
    ArrayList<String> data = new ArrayList<>();
    data.add(values[0]);
    data.add(values[1]);
    data.add(values[2]);
    data.add(values[3]);
    data.add(values[4]);
    data.add(values[5]);
    data.add(values[6]);
    line.add(data);

    if(numLine == 0){
        System.out.print("StartDate = "+ values[0]);
    }
    endDate = values[0];
    ++numLine;
}

if (endDate != null) { // Need to check null in case your CSV didn't have any rows
    System.out.println(" EndDate = " + endDate);
}

推荐阅读