当前位置: 首页 > 面试题库 >

在Java中读取大型CSV

秦才
2023-03-14
问题内容

我想从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();
    }

多达200,000条记录,数据被读入User Bean对象列表。但是对于更多的数据,我得到了

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,我正试图读入一个对象数组。我一直得到以下错误。。。JAVAutil。输入不匹配异常我认为这是因为它读取的文件是按空格分割的,而不是按逗号分割的。我想我需要用绳子。split()方法,但我不确定具体怎么做。任何建议。这是我到目前为止的代码。。。 以下是我正在使用的文本文件:

  • 问题内容: 我需要非常了解Java和内存问题的人的建议。我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件)。 我通常知道如何做到这一点(使用),但是我想知道你是否对内存有任何建议,或者提示如何更快地做到这一点。 我的文件包含文本,它不是二进制文件,每行大约有20个字符。 问题答案: 首先,如果你的文件包含二进制数据,则使用将是一个大错误(因为你会将数据转换为Str

  • 我正在使用Java开发一个web应用程序,在这里我有一个方法可以读取。使用apache poi的xlsx文件: 该方法工作正常,但是该方法处理具有数千行记录的文件的可能性有多大,例如,大约2530万行。当处理一个大文件时,我采取以下异常: 我需要知道如何避免这种错误。例如,如果有,请读取并处理该文件。xlsx 1000至1000线,或其他解决方案。

  • 问题内容: 我有一个平面文件,其中包含339276行文本,大小为62.1 MB。我试图读取所有行,根据我所具有的某些条件解析它们,然后将它们插入数据库。 我最初尝试使用bufio.Scan()循环和bufio.Text()来获取行,但我的缓冲区空间不足。我切换到使用bufio.ReadLine / ReadString / ReadByte(我尝试了每种方法),并且每种方法都有相同的问题。我没有足

  • 我在用图书馆 我在努力 库,但无法将其转换为工作簿 注意:在最终结果中,我希望返回XSSFWorkbook 上面的代码会内存溢出,任何帮助都将提前感谢

  • 我遵循这个http://blog.kondratev.pro/2015/08/reading-xlsx-on-android-4-and-hopefully.html对其进行了编码。 尝试逐行读取: 但结果却是: