Java中如何读取大于>40MB的XLSX文件呢?
下文笔者讲述读取大于40MB的文件的方法分享,如下所示
当我们使用 apache-POI 读取大excel时 出现 java.lang.OutOfMemoryError: Java heap space 当我使用 -Xmx1024m 为 java 类增加了堆大小 任然出现相应的错误,那么如何解决呢?
读取大excel的方法
使用POI对excel读取 即可使用流的方式读取excel例:
OPCPackage pkg = OPCPackage.open(file.getPath()); XSSFReader reader = new XSSFReader(pkg); 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())); String pass ="secret"; File file = new File("data/test1232000.xlsx"); try (POIFSFileSystem fs = new POIFSFileSystem(file); // wrap in org.apache.poi.poifs.filesystem.DocumentFactoryHelper.getDecryptedStream InputStream in = DocumentFactoryHelper.getDecryptedStream(fs, pass); OPCPackage pkg = OPCPackage.open(in)) { XSSFReader reader = new XSSFReader(pkg); StylesTable styles = reader.getStylesTable(); ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg); SheetContentsHandler f = new SheetContentsHandler() { // ... your implementation of SheetContentsHandler interface ... }; ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, f, true); XMLReader parser = XMLReaderFactory.createXMLReader(); parser.setContentHandler(handler); parser.parse(new InputSource(reader.getSheetsData().next())); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。