在Java中读取非常大的文件.xlsx

在Java中读取非常大的文件.xlsx,java,apache-poi,Java,Apache Poi,我正在使用Java开发一个web应用程序,其中我有一个方法,可以使用ApachePOI读取.xlsx文件: public static void xlsx(String arquivo) throws IOException{ try { FileInputStream file = new FileInputStream(new File(arquivo)); XSSFWorkbook workbook = new XSSFWorkbook(file

我正在使用Java开发一个web应用程序,其中我有一个方法,可以使用ApachePOI读取.xlsx文件:

public static void xlsx(String arquivo) throws IOException{

     try {
        FileInputStream file = new FileInputStream(new File(arquivo));
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet sheet = workbook.getSheetAt(0);
        Iterator<Row> rowIterator = sheet.iterator();
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell celula = cellIterator.next();
                /*here do the reading for each cell,*/
            }
        }
        file.close();

    } catch (IOException e) {
        e.printStackTrace();
        throw new IOException("Erro ao processar arquivo.",e.getCause());
    }
}

我需要知道如何避免这种错误。例如,如果有,请读取并处理文件.xlsx1000到1000行,或其他解决方案。

如果要保留现有实现,只需增加JVM最大堆大小即可。
有关说明和相关讨论,请参见。

您是否尝试了该选项?根据
如果内存占用是一个问题,那么对于XSSF,您可以获取底层XML数据,并自己处理它
感谢@Gagravarr的帮助,我将进行这些更改。我知道开发人员通常不会在这个过程中获得太多的输入,但需要说明的是:一个300k行的电子表格应该尽快转换成数据库。谢谢@Gus的帮助,但我不知道“数据库尽快”。你有什么参考资料吗,aboaut数据库ASAP?ASAP是一个缩写词,意思是“尽快”。谢谢@vasyltrtriakov的帮助,但我的另一个问题是我的开发机器内存不足。只有4GB。然后,如果该方法适用于您的处理算法,您可能需要考虑在部分保存中间结果(文件、数据库等)中处理大型电子表格。
(http-localhost-127.0.0.1-8080-4) Servlet.service() for servlet RestServlet threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.OutOfMemoryError: Java heap space