从java中的csv文件读取
我有一个巨大的CSV文件。我必须读取它并使用java存储在数据库中。下面的代码只从该文件中读取大约2000行并存储到数据库中。为什么?注意:下面的计算是将秒改为分钟的近似值。不要想太多从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
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行。错误在编辑器上。它被设置为“限制行”视图。