从java

时间:2015-07-06 08:45:23

标签: java csv

我有一个巨大的CSV文件。我必须阅读它并使用java.below代码存储在数据库中只读取该文件中的大约2000行并将其存储到database.why中?请注意,下面的计算是用近似值将秒数更改为分钟。对此有很多想法

import com.opencsv.CSVReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class ReadCSV {

    public static void main(String[] args) throws SQLException{

        MainController mc = new MainController();
        boolean status=false; 

        String csvFile = "C:/Users/Thanushiya/Desktop/mobios/internship/csvfile/csvfile/Master.csv";
        CSVReader  reader = null;
        List myList = new ArrayList();
        String[] row = null;
        int duration_m = 0;
        try {
            reader = new CSVReader (new FileReader(csvFile), ',', '\'', 17);
            myList = reader.readAll();
            int i=0;
                for (Object object : myList) {
                    row = (String[]) object;
                    float duration_float = Float.parseFloat(row[12]) / 60 ;
                    float duration_mod = duration_float % 1 ;

                    if(Integer.parseInt(row[12]) <= 60){
                        duration_m = 1;
                    }
                    else{
                        if(duration_mod == 0 ){
                            duration_m = (int) duration_float;
                        }
                        else{
                            duration_m = ((int) duration_float) + 1;
                        }
                    }
                    String query = "INSERT INTO master(msisdn,serv,start,end,ringwithdurartion,duration_s,status,cid,duration_m) values ('"+row[0]+"','"+row[4]+"','"+row[8]+"','"+row[10]+"','"+row[11]+"','"+row[12]+"','"+row[13]+"','"+row[15]+"','"+duration_m+"')";
                    status=mc.insertData(query);

                }//end for

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println("Done");
    }

}

1 个答案:

答案 0 :(得分:4)

使用readAll(),您可以立即将整个文件加载(或至少尝试加载)到内存中。这将严重限制在内存不足之前可以读取的行数。正如OpenCSV homepage所示,还有一个迭代器,每行读取一行:

 CSVReader reader = new CSVReader(new FileReader("C:/Users/Thanushiya/Desktop/mobios/internship/csvfile/csvfile/Master.csv"), ',', '\'', 17);
 String [] nextLine;
 while ((nextLine = reader.readNext()) != null) {
    // put the code from your for loop here
 }