在java中读取大型CSV
我想从CSV中读取大量数据,包含大约500,000行。 我正在使用OpenCSV库。 我的代码是这样的
CsvToBean csvConvertor = new CsvToBean(); List list = null; try { list =csvConvertor.parse(strategy, new BufferedReader(new FileReader(filepath))); } catch (FileNotFoundException e) { e.printStackTrace(); }
最多200,000条记录,数据被读入User bean对象列表。 但对于数据而言,我得到的不止于此
java.lang.OutOfMemoryError: Java heap space
我在“eclipse.ini”文件中有这个内存设置
-Xms256m -Xmx1024m
我正在考虑将大文件拆分为单独文件并再次读取这些文件的解决方案,我认为这是一个很长的解决方案。
有没有其他方法,我可以通过它避免OutOfMemoryErrorexception。
逐行阅读
这样的事情
CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); String [] nextLine; while ((nextLine = reader.readNext()) != null) { // nextLine[] is an array of values from the line System.out.println(nextLine[0] + nextLine[1] + "etc..."); }
您必须为您的应用设置-Xmx
值,而不是在这种情况下使用eclipse。 在“运行配置”中,选择您的应用程序,然后转到“参数”选项卡,并在“VM参数”中设置该值,例如-Xmx1024m
。 您可以通过右键单击要运行的文件来打开运行配置,然后选择运行方式,然后选择“运行配置…”
通过以下示例,您可以从csv文件中读取n条记录。
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class ReadCSV { public static void main(String[] args) { String csvFile = "C:/Users/LENOVO/Downloads/Compressed/GeoIPCountryWhois.csv"; BufferedReader br = null; String line = ""; String cvsSplitBy = ","; try { br = new BufferedReader(new FileReader(csvFile)); while ((line = br.readLine()) != null) { // use comma as separator String[] country = line.split(cvsSplitBy); System.out.println("Country [code= " + country[4] + " , name=" + country[5] + "]"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("Done"); } }