【发布时间】:2012-06-20 11:38:11
【问题描述】:
我正在开发一个从 excel 文件 (xlsx) 读取数据的 Web 应用程序。我正在使用 POI 阅读 excel 表。问题是当我尝试读取 excel 文件时,服务器会抛出以下错误:
我尝试读取的 excel 文件大小接近 80 MB。这个问题有什么解决办法吗?
实际上用户在将文件保存到磁盘后正在上传文件和应用程序尝试读取文件。 我用来测试的代码 sn-p 是:
File savedFile = new File(file_path);
FileInputStream fis = null;
try {
fis = new FileInputStream(savedFile);
XSSFWorkbook xWorkbook = new XSSFWorkbook(fis);
XSSFSheet xSheet = xWorkbook.getSheetAt(5);
Iterator rows = xSheet.rowIterator();
while (rows.hasNext()) {
XSSFRow row = (XSSFRow) rows.next();
Iterator cells = row.cellIterator();
List data = new ArrayList();
while (cells.hasNext()) {
XSSFCell cell = (XSSFCell) cells.next();
System.out.println(cell.getStringCellValue());
data.add(cell);
}
}
} catch (IOException e) {
e.printStackTrace();
}
【问题讨论】:
-
看起来您正在尝试读取整个 80MB 的缓冲区,这会引发 OOM。
-
有什么替代方法可以像片段一样阅读这个?
-
是的。应该有。可能存在文件大小高达 Gb 的情况。该用户是上传文件还是磁盘文件?可以贴一下文件读取的代码sn-p吗?
标签: java excel apache-poi out-of-memory