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()));
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


