Java:读取特定列太耗费内存

时间:2017-11-27 02:54:34

标签: java apache-poi

我需要使用Apache POI库读取大型(50000行和20列)excel文件。有another question要求完全相同的东西。我的尝试方法如下:

public static ArrayList<Double> readColumn(String excelFile,String sheetName, int columnNumber)
        {
            ArrayList<Double> excelData = new ArrayList<>();
            XSSFWorkbook  workbook = null;
            try
            {
                workbook = new XSSFWorkbook(excelFile);
            } catch (IOException e)
            {
                e.printStackTrace();
            }
            Sheet sheet = workbook.getSheet(sheetName);
            for (int i = 0; i <= sheet.getLastRowNum(); i++)
            {
                Row row = sheet.getRow(i);
                if (row != null) {
                    Cell cell = row.getCell(columnNumber);
                    if (cell != null)
                    {
                        // Skip cellls that are not numericals
                        if (cell.getCellTypeEnum() == CellType.NUMERIC)
                        {
                            excelData.add(cell.getNumericCellValue());
                            System.out.println(cell.getNumericCellValue());
                        }
                    }
                }
            }
            return excelData;
        }

不幸的是,虽然此方法在访问低索引列号(例如columnNumber = 1)时似乎有效,但我得到一个大columnNumber的OutOfMemoryError异常。文件本身不是太大,不能让我的电脑耗尽内存。我可以用很少的内存需求在Python中实现相同的结果。有更好的方法来解决这个问题吗?或者,是否有任何Java库可以让我这样做?

0 个答案:

没有答案