java吧 关注:1,220,909贴子:12,672,134
  • 26回复贴,共1

刚工作萌新求助

只看楼主收藏回复

rt!!!
苦逼啊,刚工作,领导让我给写一个数据稽查工具,基本都写好了,有个功能一直难以实现,求问
就是用java读取一个超大excel文件,取出这个文件第一列所有数据存入set文件中,之前测试的文件比较小,没注意,后来真实数据我发现非常大,基本都是十万行起,基本都会出现内存溢出问题, 我百度了一下,发现让我使用流式读取,但是实在不会,求问下大神 怎么搞得这个, 我原来代码如下
Set<String> set = new HashSet<String>();
File file = new File(f.getAbsolutePath());
try {
FileInputStream in = new FileInputStream(file);
//下面这一行会内存溢出
XSSFWorkbook wb = new XSSFWorkbook(in);
Sheet sheet = wb.getSheetAt(0);
// int firstRowNum = sheet.getFirstRowNum();
int lastRowNum = sheet.getLastRowNum();
Row row = null;
Cell cell_a = null;
Cell cell_b = null;
for (int i = 0; i <= lastRowNum; i++) {
row = sheet.getRow(i); // 取得第i行
cell_a = row.getCell(0); // 取得i行的第一列
cell_a.setCellType(Cell.CELL_TYPE_STRING);
String cellValue = cell_a.getStringCellValue();
if (!cellValue.equals("通话标识")) {
set.add(cellValue);
}
}
wb.close();
} catch (Exception e) {
e.printStackTrace();
}


IP属地:安徽1楼2018-06-26 16:55回复
    没人吗


    IP属地:安徽2楼2018-06-26 16:57
    回复
      大神在哪里


      IP属地:安徽3楼2018-06-26 17:00
      回复
        用fileinput试试 好像没有容量限制 只是速度可能会比较慢我刚好前几天做了一个


        5楼2018-06-26 17:07
        回复(4)
          poi不是支持大容量excel的读取吗?我看你要求只有读取,可以用SXSSFWorkbook试试。具体的案例你去官网找找,我之前看到过


          IP属地:浙江6楼2018-06-26 17:57
          回复
            直接用xssfworkbook兼容不了低版本吧


            IP属地:四川来自Android客户端8楼2018-06-26 22:44
            回复(5)
              不能弄个缓冲区嘛,一下子读完肯定爆内存啊


              IP属地:河南来自Android客户端9楼2018-06-26 23:05
              收起回复