如何在不增加VM的情况下读取java中的大型excel文件

如何在不增加VM的情况下读取java中的大型excel文件,java,apache-poi,Java,Apache Poi,如何在不增加JVM(如-Xmx1G)的情况下,使用POI库在java中读取包含10张以上工作表的大型(95+MB)excel工作簿。如果我们在不增加VM的情况下运行jar文件,则会出现Get-OutOfMemory错误。如何通过编码本身而不是增加VM来优化这个问题?没有聪明的“优化”可以让您继续使用当前的方法并使用更少的内存运行 您需要更改程序,使其不会将整个工作簿加载到内存中 @M.Deinum指出,ApachePOI提供了另一种处理Excel文件的方法,在这种方法中,您可以获得一系列解析器事

如何在不增加JVM(如-Xmx1G)的情况下,使用POI库在java中读取包含10张以上工作表的大型(95+MB)excel工作簿。如果我们在不增加VM的情况下运行jar文件,则会出现Get-OutOfMemory错误。如何通过编码本身而不是增加VM来优化这个问题?

没有聪明的“优化”可以让您继续使用当前的方法并使用更少的内存运行

您需要更改程序,使其不会将整个工作簿加载到内存中


@M.Deinum指出,ApachePOI提供了另一种处理Excel文件的方法,在这种方法中,您可以获得一系列解析器事件,而不是每个电子表格的内存表示。从内存模型切换到基于事件的模型将需要对应用程序进行大量的重新编码。但是如果你买不起内存,你就没有其他实用的选择。

你需要如何处理这张表?我有一个excel工作簿(95mb),它有15张工作表,每张工作表有不同的字段。我必须读取数据并将其存储到SQL数据库中的相应字段中。Apache POI有一个用于读取excel文件的流/事件模型,它非常高效(内存方面),并且不会将整个工作表加载到内存中。我建议你看看。谢谢,先生,我使用了POI的HSSF来读取,在运行jar文件时,我手动将VM增加到-Xmx1G。如果我在不增加VM的情况下正常运行jar文件,则意味着我会出现OutOfMemory错误。如前所述,请使用事件模型而不是dom模型(最后一个模型读取内存中的所有内容,另一个模型使用流式处理)。所以基本上改变了你读取文件的方式。