从java中的csv文件读取

从java中的csv文件读取,java,csv,Java,Csv,我有一个巨大的CSV文件。我必须读取它并使用java存储在数据库中。下面的代码只从该文件中读取大约2000行并存储到数据库中。为什么?注意:下面的计算是将秒改为分钟的近似值。不要想太多 import com.opencsv.CSVReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.SQLException; impo

我有一个巨大的CSV文件。我必须读取它并使用java存储在数据库中。下面的代码只从该文件中读取大约2000行并存储到数据库中。为什么?注意:下面的计算是将秒改为分钟的近似值。不要想太多

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");
    }

}
导入com.opencsv.CSVReader;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.sql.SQLException;
导入java.util.ArrayList;
导入java.util.List;
公共类ReadCSV{
公共静态void main(字符串[]args)引发SQLException{
MainController mc=新的MainController();
布尔状态=假;
字符串csvFile=“C:/Users/Thanushiya/Desktop/mobios/interporation/csvFile/csvFile/Master.csv”;
CSVReader reader=null;
List myList=new ArrayList();
字符串[]行=null;
int-duration_m=0;
试一试{
reader=new-CSVReader(新文件读取器(csvFile),',','\'',17);
myList=reader.readAll();
int i=0;
用于(对象:myList){
行=(字符串[])对象;
浮动持续时间\u float=float.parseFloat(第[12]行)/60;
浮动持续时间\u mod=持续时间\u浮动%1;
如果(Integer.parseInt(row[12])带有
readAll()
您正在将整个文件一次加载(或至少尝试加载)到内存中。这将严重限制您在内存不足之前可以读取的行数。如上所示,还有一个迭代器可以每行读取一行:

 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
 }
使用
readAll()
可以立即将整个文件加载(或至少尝试加载)到内存中。这将严重限制在内存不足之前可以读取的行数。如上所示,还有一个迭代器可以每行读取一行:

 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
 }

2001行发生了什么?没有问题。只读取了200行并完成了运行。请添加一个通用的捕获所有异常处理程序,可能是一些数据导致了此问题。(csv文件中有多少行?)2001行发生了什么?没有问题。只读取了200行并完成了运行。请添加一个通用的捕获所有异常处理程序,可能是一些数据导致了此问题。(csv文件中有多少行?)在普通的文本编辑器中有什么特别的地方可以看到吗?我遇到过一个糟糕的情况,在这种情况下,阅读就这样停止了,那就是使用了不同的行终止符(可能是因为文件被缝合在子报告中).Btw,即使您没有耗尽内存,逐行读取文件是一种更好的解决方案,而不是一次读取所有内容。不特殊。我在SQL yog中编写了计数查询。这个问题似乎也有2000行。错误在编辑器上。它被设置为“限制行”视图。在r中可以看到的任何特殊内容egular文本编辑器?我遇到过一个令人讨厌的情况,在这种情况下,阅读就这样停止了,使用了不同的行终止符(可能是因为文件被缝合在子报告中).Btw,即使您没有耗尽内存,逐行读取文件是一种更好的解决方案,而不是一次读取所有内容。这并不特别。我在SQL yog中编写了一个计数查询。这个问题似乎也有2000行。错误在编辑器上。它被设置为“限制行”视图。