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();
}
苦逼啊,刚工作,领导让我给写一个数据稽查工具,基本都写好了,有个功能一直难以实现,求问
就是用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();
}