gpt4 book ai didi

java - 如何读取大小 >40MB 的 XLSX 文件

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:03 25 4
gpt4 key购买 nike

我正在使用 apache-POIXSSF 来读取 XLSX 文件。我遇到错误 java.lang.OutOfMemoryError: Java heap space。后来,使用 -Xmx1024m 为 java 类增加堆大小仍然重复相同的错误。

代码:

String filename = "D:\\filename.xlsx";
FileInputStream fis = null;
try {
fis = new FileInputStream(filename);
XSSFWorkbook workbook = new XSSFWorkbook(fis);

在上面的代码段中,执行在XSSFWorkbook处停止并抛出指定的错误。有人可以建议更好的方法来读取大型 XLSX 文件。

最佳答案

POI 允许您以流式方式读取 excel 文件。 API 几乎是 SAX 的包装器。确保使用采用字符串的构造函数以正确的方式打开 OPC 包。否则您可能会立即耗尽内存。

OPCPackage pkg = OPCPackage.open(file.getPath());
XSSFReader reader = new XSSFReader(pkg);

现在,阅读器将允许您获取不同部分的 InputStreams。如果你想自己做 XML 解析(使用 SAX 或 StAX),你可以使用这些。但这需要非常熟悉格式。

一个更简单的选择是使用 XSSFSheetXMLHandler .这是一个读取第一张纸的示例:

StylesTable styles = reader.getStylesTable();
ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg);
ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, mySheetContentsHandler, true);

XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler);
parser.parse(new InputSource(reader.getSheetsData().next()));

mySheetsContentHandler 应该是您自己的 XSSFSheetXMLHandler.SheetContentsHandler 实现.此类将输入行和单元格。

但是请注意,如果您的共享字符串表很大(如果您的大工作表中没有任何重复字符串,就会发生这种情况),这可能会适度消耗内存。如果内存仍然是个问题,我建议使用原始 XML 流(也由 XSSFReader 提供)。

关于java - 如何读取大小 >40MB 的 XLSX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com