我很抱歉的说,这个工具类同样不是我写的,公司大神的作品,拿过老以作借鉴。

下面是代码

package ;
import com.opencsv.CSVReader;
import org.apache.commons.collections.map.HashedMap;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.*;
 import java.text.SimpleDateFormat;
 import java.util.*;public class ResolveImportObjFile {
     /**
      *
      * @param file 文件
      * @param fileName 文件名
      * @return 返回表中的数据
      */
     public static List<List<String>> getListFromFile(File file, String fileName){
         List<List<String>> mapList = new ArrayList<>();
         try {
             /** 如果是excel格式调用ImportTxtFile方法,直接返回结果 */
             mapList = importExcelFile(file,fileName);
         }catch (IOException e) {
             e.printStackTrace();
         }
         
         return mapList;
     }
     /**
      *
      * @param file 文件
      * @param fileName 文件名
      * @return 返回表中的数据
      */
     public static List<Map<String,Object>> getMapFromFile(File file, String fileName){
         List<Map<String, Object>> mapList = new ArrayList<>();
         try {
             /** 如果是excel格式调用ImportTxtFile方法,直接返回结果 */
             mapList = importExcelFileReturnMapList(file,fileName);
         }catch (IOException e) {
             e.printStackTrace();
         }
         
         return mapList;
     }
     
     /**
      * 读取Excel的内容,第一维数组存储的是多少行,二维数组存储的每一行是多少列。
  
      * 兼容Excel 2003(后缀名:xls)及 2007(后缀名:xlsx)的文件,同时还支持读取csv格式的文件
      *
      * @param file
      *            文件
      * @return 这里返回的是List<List<String>> 格式
      * @throws Exception
      */
     private static List<List<String>> importExcelFile(File file,String fileName) throws IOException {
         List<List<String>> list = new ArrayList<>();
         String[][] returnArray;
         /** 如果是CSV格式调用ImportCsvFile方法,直接返回结果 */
         if (isCsv(fileName)) {
             returnArray = importCsvFile(file,fileName,0);
         }else{
             returnArray = importXlsAndXlsxFile(file,fileName,0);
         }
         
         if(null!=returnArray && returnArray.length>0){
             for (int i = 0; i < returnArray.length; i++) {
                 String[] newStr=Arrays.copyOf(returnArray[i], returnArray[i].length-1);
                 list.add(Arrays.asList(newStr));
             }
         }
         return list;
     }
     
     /**
      * 读取Excel的内容,第一维数组存储的是多少行,二维数组存储的每一行是多少列。
  
      * 兼容Excel 2003(后缀名:xls)及 2007(后缀名:xlsx)的文件,同时还支持读取csv格式的文件
      *
      * @param file
      *            文件
      * @return  这里返回的是List<Map<String,Object>> 格式
      * @throws Exception
      */
     private static List<Map<String,Object>> importExcelFileReturnMapList(File file,String fileName) throws IOException {
         List<Map<String,Object>> mapList = new ArrayList<>();
         String[][] returnArray;
         /** 如果是CSV格式调用ImportCsvFile方法,直接返回结果 */
         if (isCsv(fileName)) {
             returnArray = importCsvFile(file,fileName,0);
         }else{
             returnArray = importXlsAndXlsxFile(file,fileName,0);
         }
         
         if(null!=returnArray && returnArray.length>0){          //从一开始,0是excel表头,我导入的excel一般是只有一行表头
             for (int i = 1; i < returnArray.length; i++) {
                 String[] newStr=Arrays.copyOf(returnArray[i], returnArray[i].length-1);
                 Map<String,Object> map = new HashedMap();
                 for(int j=0;j<returnArray[i].length;j++){
                     map.put(returnArray[0][j], returnArray[i][j]);
                 }
                 mapList.add(map);
             }
         }
         return mapList;
     }
     
     /**
      * csv格式的文件,第一维数组存储的是多少行,二维数组存储的每一行是多少列。
      *
      * @param file
      *            文件
      * @param ignoreRows
      *            读取数据忽略的行数,例:行头不需要读入,忽略的行数为1,那么将ignoreRows设为1即可
      * @return
      * @throws Exception
      */
     public static String[][] importCsvFile(File file, String fileName, int ignoreRows) throws IOException {
  
         /** 验证文件是否合法 */
         if (!isCsv(fileName)) {
             throw new RuntimeException("不是csv格式的文件");
         }
         InputStreamReader inputStream = null;
         CSVReader reader = null;
         List<String[]> result = new ArrayList<String[]>();
         int rowSize = 0;
         try {
             inputStream = new InputStreamReader(new FileInputStream(file), "GBK");
             reader = new CSVReader(inputStream);
             String[] nextRow = null;
             int i = 0;
             while ((nextRow = reader.readNext()) != null) {
                 ++i;
                 if (i <= ignoreRows) {
                     continue;
                 }
                 if (nextRow == null || nextRow.length <= 0) {
                     continue;
                 }
                 int tempRowSize = nextRow.length;
                 if (tempRowSize > rowSize) {
                     rowSize = tempRowSize;
                 }
                 result.add(nextRow);
             }
  
             reader.close();
             inputStream.close();
         } catch (IOException e) {
             throw e;
         } finally {
             if (inputStream != null) {
                 try {
                     inputStream.close();
                 } catch (IOException e) {
                     inputStream = null;
                     e.printStackTrace();
                 }
             }
             if (reader != null) {
                 try {
                     reader.close();
                 } catch (IOException e) {
                     reader = null;
                     e.printStackTrace();
                 }
             }
         }
  
         String[][] returnArray = new String[result.size()][rowSize];
         for (int i = 0; i < returnArray.length; i++) {
             returnArray[i] = result.get(i);
         }
         return returnArray;
     }
     
     /**
      * xls、xlsx格式的文件,第一维数组存储的是多少行,二维数组存储的每一行是多少列。
      *
      * @param file
      *            文件
      * @param ignoreRows
      *            读取数据忽略的行数,例:行头不需要读入,忽略的行数为1,那么将ignoreRows设为1即可
      * @return
      * @throws Exception
      */
     public static String[][] importXlsAndXlsxFile(File file, String fileName, int ignoreRows) throws IOException {
         List<String[]> result = new ArrayList<String[]>();
         
         Workbook workbook = null;
         InputStream inputStream = null;
         int rowSize = 0;
  
         try {
             inputStream = new FileInputStream(file);
             if (isExcel2003(fileName)) {
                 workbook = new HSSFWorkbook(inputStream);
             } else {
                 workbook = new XSSFWorkbook(inputStream);
             }
  
             for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
                 Sheet sheet = workbook.getSheetAt(sheetIndex);
                 for (int rowIndex = ignoreRows; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
                     Row row = sheet.getRow(rowIndex);
                     if (row == null||isEmpty(row)) {
                         continue;
                     }                  //这里有个加一,会导致结果最后一列会用空列,我不知道为什么要加一,我尝试着去掉,然后会报错。                                      // 所以,最后处理结果集的时候,我选择直接删去最后一列
                     int tempRowSize = row.getLastCellNum() + 1;
                     if (tempRowSize > rowSize) {
                         rowSize = tempRowSize;
                     }
                     String[] values = new String[rowSize];
                     Arrays.fill(values, "");
                     boolean hasValue = false;
                     for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
                         String value = "";
                         Cell cell = row.getCell(columnIndex);
                         if (cell != null) {
                             cell.setCellType(1);
                             switch (cell.getCellType()) {
                             case HSSFCell.CELL_TYPE_STRING:
                                 value = cell.getStringCellValue();
                                 break;
                             case HSSFCell.CELL_TYPE_NUMERIC:
                                 if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                     Date date = cell.getDateCellValue();
                                     if (date != null) {
                                         value = new SimpleDateFormat("yyyy-MM-dd").format(date);
                                     } else {
                                         value = "";
                                     }
                                 } else {
 //                                    value = new DecimalFormat("0").format(cell.getNumericCellValue());
                                     value = cell.getNumericCellValue() + "";
                                 }
                                 break;
                             case HSSFCell.CELL_TYPE_FORMULA:
                                 // 导入时如果为公式生成的数据则无值
                                 if (!cell.getStringCellValue().equals("")) {
                                     value = cell.getStringCellValue();
                                 } else {
                                     value = cell.getNumericCellValue() + "";
                                 }
                                 break;
                             case HSSFCell.CELL_TYPE_BLANK:
                                 break;
                             case HSSFCell.CELL_TYPE_ERROR:
                                 value = "";
                                 break;
                             case HSSFCell.CELL_TYPE_BOOLEAN:
                                 value = (cell.getBooleanCellValue() == true ? "Y" : "N");
                                 break;
                             default:
                                 value = "";
                             }
                         }
                         if (columnIndex == 0 && value.trim().equals("")) {
                             continue;
                         }
                         values[columnIndex] = rightTrim(value);
                         hasValue = true;
                     }
  
                     if (hasValue) {
                         result.add(values);
                     }
                 }
             }
  
             inputStream.close();// opencsv 这个jar包低版本会有close方法,高版本没有
 //            workbook.close();
         } catch (IOException e) {
             throw e;
         } finally {
             if (inputStream != null) {
                 try {
                     inputStream.close();
                 } catch (IOException e) {
                     inputStream = null;
                     e.printStackTrace();
                 }
             }// opencsv 这个jar包低版本会有close方法,高版本没有
 //            if (workbook != null) {
 //                try {
 //                    workbook.close();
 //                } catch (IOException e) {
 //                    workbook = null;
 //                    e.printStackTrace();
 //                }
 //            }
         }
  
         String[][] returnArray = new String[result.size()][rowSize];
         for (int i = 0; i < returnArray.length; i++) {
             returnArray[i] = result.get(i);
         }
         return returnArray;
     }
     
     private static boolean isEmpty(Row row) {
         Iterator<Cell> iterator = row.cellIterator();
         while(iterator.hasNext()){
             Cell cell = iterator.next();
             cell.setCellType(1);
             if(!StringUtils.isBlank(cell.getStringCellValue())){
                 return false;
             }
         }
         return true;
     }    /**
      * 验证excel文件
      *
      * @param fileName
           *            文件名称
      * @return boolean
      */
     public static boolean validateExcel(String fileName) {
         /** 检查文件名是否为空或者是否是Excel格式的文件 */
         return fileName != null && isExcel2003(fileName) || isExcel2007(fileName);
     }
  
  
     /**
      * 是否是2003的excel,返回true是2003
      *
      * @param fileName
      *            文件名称
      * @return boolean
      */
     public static boolean isExcel2003(String fileName) {
         return fileName.matches("^.+\\.(?i)(xls)$");
     }
  
     /**
      * 是否是2007的excel,返回true是2007
      *
      * @param fileName
      *            文件名称
      * @return boolean
      */
     public static boolean isExcel2007(String fileName) {
         return fileName.matches("^.+\\.(?i)(xlsx)$");
     }
     
     /**
      * 是否是csv格式的文件,返回true是csv格式
      *
      * @param fileName
      *            文件名称
      * @return boolean
      */
     public static boolean isCsv(String fileName) {
         return fileName.matches("^.+\\.(?i)(csv)$");
     }
  
     /**
      * 去掉字符串右边的空格
      *
      * @param str
      *            要处理的字符串
      * @return 处理后的字符串
      */
     private static String rightTrim(String str) {
         if (str == null) {
             return "";
         }
         int length = str.length();
         for (int i = length - 1; i >= 0; i--) {
             if (str.charAt(i) != 0x20) {
                 break;
             }
             length--;
         }
         return str.substring(0, length);
     }
 }

  需要引入的jar包

<dependency>
             <groupId>com.opencsv</groupId>
             <artifactId>opencsv</artifactId>
             <version>版本号</version>
         </dependency>

导入的excel 我自己也写过,由于没有对excel空值的处理,导致数据库存了许多的 null 字符串,StringUtil.isNotBlank()方法没有判断出来,debug才发现excel的空值转换成了字符串 "null"