Leer datos de excel y meterlos en lista en Java

import java.io.File;
import java.io.FileInputStream;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Prueba {

private ArrayList<ArrayList<String>> lista = new ArrayList<ArrayList<String>>();

public ArrayList<ArrayList<String>> getLista() {
return lista;
}

public Prueba(File fileName) throws ParseException{
List cellDataList = new ArrayList();
try{
FileInputStream fileInputStream = new FileInputStream( fileName);
XSSFWorkbook workBook = new XSSFWorkbook(fileInputStream);
XSSFSheet hssfSheet = workBook.getSheetAt(0);
Iterator rowIterator = hssfSheet.rowIterator();
int rows = hssfSheet.getLastRowNum();
XSSFRow hssfRow;
/*while (rowIterator.hasNext()){

XSSFRow hssfRow = (XSSFRow) rowIterator.next();
Iterator iterator = hssfRow.cellIterator();
List cellTempList = new ArrayList();
while (iterator.hasNext()){
XSSFCell hssfCell = (XSSFCell) iterator.next();
cellTempList.add(hssfCell);
}
cellDataList.add(cellTempList);
}
*/
int cols=0;
for (int r = 0; r < rows+1; r++) {
                hssfRow = hssfSheet.getRow(r);
                if (hssfRow == null){
                    break;
                }else{
                    System.out.print("Row: " + r + " -> ");
                    ArrayList<String> cellTempList = new ArrayList<String>();
                    for (int c = 0; c < (cols = hssfRow.getLastCellNum()); c++) {
                        /*
                            We have those cell types (tenemos estos tipos de celda):
                                CELL_TYPE_BLANK, CELL_TYPE_NUMERIC, CELL_TYPE_BLANK, CELL_TYPE_FORMULA, CELL_TYPE_BOOLEAN, CELL_TYPE_ERROR
                        */
                        String cellValue = hssfRow.getCell(c) == null?"":
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_STRING)?hssfRow.getCell(c).getStringCellValue():
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_NUMERIC)?"" + hssfRow.getCell(c).getNumericCellValue():
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_BOOLEAN)?"" + hssfRow.getCell(c).getBooleanCellValue():
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_BLANK)?"":
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_FORMULA)?"FORMULA":
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_ERROR)?"ERROR":"";                      
                        System.out.print("[Column " + c + ": " + cellValue + "] ");
                        cellTempList.add(cellValue);
                    }
                    System.out.println();
                    lista.add(cellTempList);
                }
            }          

}catch (Exception e)
{e.printStackTrace();}
//Leer(cellDataList);
}

private void Leer(List cellDataList){
for (int i = 0; i < cellDataList.size(); i++){
List cellTempList = (List) cellDataList.get(i);
ArrayList<String> fila = new ArrayList<String>();
for (int j = 0; j < cellTempList.size(); j++){
XSSFCell hssfCell = (XSSFCell) cellTempList.get(j);
String stringCellValue = hssfCell.toString();
System.out.print(stringCellValue+" ");
fila.add(stringCellValue);

}
lista.add(fila);
System.out.println();
}
}
}