首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 大數據量 XLSX 轉 XML:SAX 模式流式讀取避免 OOM

     編輯:程式設計疑難解答

問題

POI `XSSFWorkbook` 將整個 XLSX 載入內存,大文件導致 OOM。

解決方案:SAX 事件驅動解析

實現 `SheetContentsHandler` 接口,逐行處理,不載入整表。
參考:POI SAX 讀取大 Excel 完整示例

核心代碼結構

OPCPackage pkg = OPCPackage.open(file);
XSSFReader reader = new XSSFReader(pkg);
StylesTable styles = reader.getStylesTable();
ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);

InputStream sheetInput = reader.getSheet("rId1");
XMLReader parser = XMLReaderFactory.createXMLReader();
ContentHandler handler = new MySheetHandler(styles, strings);
parser.setContentHandler(handler);
parser.parse(new InputSource(sheetInput));

自定義 Handler

class MySheetHandler extends DefaultHandler {
    // 重寫 startElement, endElement, characters
    // 逐行收集 cell 值,處理完一行即可寫入 XML/數據庫,釋放內存
}

部分讀取需求

若只需讀取特定行/列,在 Handler 中判斷 `rowIndex`、`colIndex` 篩選,滿足條件時處理,否則忽略,不必讀完整文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved