在java中读取大型CSV

Nin*_*ale 5 java file-io opencsv

我想从CSV中读取大量数据,包含大约500,000行.我正在使用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();
    }
Run Code Online (Sandbox Code Playgroud)

最多200,000条记录,数据被读入用户bean对象列表.但对于数据而言,我得到的不止于此

java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

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

-Xms256m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)

我正在考虑将大文件拆分为单独文件并再次读取这些文件的解决方案,我认为这是一个很长的解决方案.

有没有其他方法,我可以通过它避免OutOfMemoryError异常.

urb*_*nus 12

逐行阅读

这样的事情

    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...");
    }
Run Code Online (Sandbox Code Playgroud)

  • 那就对了.这只是一个例子.而不是将结果打印到控制台,您可以保留数据以进行进一步处理(即批处理)或做任何您想做的事情 (3认同)
  • 那个 println 根本没有任何意义。这也不是他问题的答案。他需要将数据转换为 User 对象,如果他一次需要所有 200 000 个对象,则逐行读取没有帮助。 (2认同)