在java中读取大型CSV



我想从CSV中读取包含大约500000行的巨大数据。我正在使用OpenCSV库。我的代码是这样的

    CsvToBean<User> csvConvertor = new CsvToBean<User>();
    List<User> list = null;
    try {
        list =csvConvertor.parse(strategy, new BufferedReader(new FileReader(filepath)));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

多达200000条记录,数据被读取到Userbean对象的列表中。但对于更多的数据,我得到了

java.lang.OutOfMemoryError: Java heap space

我在"eclipse.ini"文件中有这个内存设置

-Xms256m
-Xmx1024m

我正在考虑一个解决方案,将巨大的文件拆分为单独的文件,然后再次读取这些文件,我认为这是一个漫长的解决方案。

有没有其他方法可以避免OutOfMemoryError异常。

逐行读取

像这个

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

下面的示例通过从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");
    }
}

您必须为应用程序设置-Xmx值,而不是eclipse。在"运行配置"中,选择您的应用程序,然后转到"参数"选项卡,在"VM参数"中设置该值,例如-Xmx1024m。右键单击要运行的文件,然后选择运行方式,然后选择"运行配置…",即可打开运行配置。

相关内容

  • 没有找到相关文章

最新更新