当前位置 : 主页 > 编程语言 > java >

上传下载工具类

来源:互联网 收集:自由互联 发布时间:2021-06-28
ExcelUtil.java /** * @Project CASICMIS * @Package com.fh.util * @Title ExcelUtil.java * @Description TODO(描述) * @version V 1.0 */package com.fh.util;import java.io.FileInputStream;import java.io.IOException;import java.text.DecimalForma
ExcelUtil.java
/**
 * @Project CASICMIS
 * @Package com.fh.util
 * @Title ExcelUtil.java
 * @Description TODO(描述)
 * @version V 1.0
 */
package com.fh.util;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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;
import org.springframework.web.multipart.MultipartFile;

/**
 * @Project CASICMIS
 * @Package com.fh.util
 * @ClassName ExcelUtil.java
 * @Description TODO(Excel表操作工具类)
 */
public class ExcelUtil {
	/** 
     * 合并方法,读取excel文件 
     * 根据文件名自动识别读取方式 
     * 支持97-2013格式的excel文档 
     *  
     * @param fileName 
     *            上传文件名 
     * @param file 
     *            上传的文件 
     * @return 返回列表内容格式: 
     *  每一行数据都是以对应列的表头为key 内容为value 比如 excel表格为: 
     * =============== 
     *  A | B | C | D 
     * ===|===|===|=== 
     *  1 | 2 | 3 | 4 
     * ---|---|---|---  
     *  a | b | c | d 
     * --------------- 
     * 返回值 map: 
     *   map1:   A:1 B:2 C:3 D:4 
     *   map2:   A:a B:b C:d D:d 
     * @throws java.io.IOException 
     */  
    public static List readExcel(String filePath) throws Exception{  
        //准备返回值列表  
        List valueList=new ArrayList(); String ExtensionName=getExtensionName(filePath); //判断Excel是那个版本 if(ExtensionName.equalsIgnoreCase("xls")){ valueList=readExcel2003(filePath); }else if(ExtensionName.equalsIgnoreCase("xlsx")) { valueList=readExcel2007(filePath); } return valueList; } /** * 读取97-2003格式 * @param filePath 文件路径 * @throws java.io.IOException */ public static List readExcel2003(String filePath) throws IOException{ //返回结果集 List valueList=new ArrayList(); FileInputStream fis=null; try { fis=new FileInputStream(filePath); HSSFWorkbook wookbook = new HSSFWorkbook(fis); // 创建对Excel工作簿文件的引用 HSSFSheet sheet = wookbook.getSheetAt(0); // 在Excel文档中,第一张工作表的缺省索引是0 int rows = sheet.getPhysicalNumberOfRows(); // 获取到Excel文件中的所有行数­ Map
       
         keys=new HashMap
        
         (); int cells=0; // 遍历行­(第1行 表头) 准备Map里的key HSSFRow firstRow = sheet.getRow(0); if (firstRow != null) { // 获取到Excel文件中的所有的列 cells = firstRow.getPhysicalNumberOfCells(); // 遍历列 for (int j = 0; j < cells; j++) { // 获取到列的值­ try { HSSFCell cell = firstRow.getCell(j); String cellValue = getCellValueForHssf(cell); keys.put(j,cellValue); } catch (Exception e) { e.printStackTrace(); } } } // 遍历行­(从第二行开始) for (int i = 1; i < rows; i++) { // 读取左上端单元格(从第二行开始) HSSFRow row = sheet.getRow(i); // 行不为空 if (row != null) { //准备当前行 所储存值的map Map
         
           val=new HashMap
          
           (); boolean isValidRow = false; // 遍历列 for (int j = 0; j < cells; j++) { // 获取到列的值­ try { HSSFCell cell = row.getCell(j); String cellValue = getCellValueForHssf(cell); val.put(keys.get(j),cellValue); if(!isValidRow && cellValue!=null && cellValue.trim().length()>0){ isValidRow = true; } } catch (Exception e) { e.printStackTrace(); } } //第I行所有的列数据读取完毕,放入valuelist if(isValidRow){ valueList.add(val); } } } } catch (IOException e) { e.printStackTrace(); }finally { fis.close(); } return valueList; } /** * 读取2007-2013格式 * @param filePath 文件路径 * @return * @throws java.io.IOException */ public static List
            readExcel2007(String filePath) throws IOException{ List valueList=new ArrayList(); FileInputStream fis =null; try { fis =new FileInputStream(filePath); XSSFWorkbook xwb = new XSSFWorkbook(fis); // 构造 XSSFWorkbook 对象,strPath 传入文件路径 XSSFSheet sheet = xwb.getSheetAt(0); // 读取第一章表格内容 // 定义 row、cell XSSFRow row; // 循环输出表格中的第一行内容 表头 Map
              
                keys=new HashMap
               
                (); row = sheet.getRow(0); if(row !=null){ for (int j = row.getFirstCellNum(); j <=row.getPhysicalNumberOfCells(); j++) { if(row.getCell(j)!=null){ if(!row.getCell(j).toString().isEmpty()){ keys.put(j, row.getCell(j).toString()); } }else{ keys.put(j, "K-R1C"+j+"E"); } } } // 循环输出表格中的从第二行开始内容 for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row != null) { boolean isValidRow = false; Map
                
                  val = new HashMap
                 
                  (); for (int j = row.getFirstCellNum(); j <= row.getPhysicalNumberOfCells(); j++) { XSSFCell cell = row.getCell(j); String cellValue = getCellValueForXssf(cell); val.put(keys.get(j),cellValue); if(!isValidRow && cellValue!=null && cellValue.trim().length()>0){ isValidRow = true; } } // 第I行所有的列数据读取完毕,放入valuelist if (isValidRow) { valueList.add(val); } } } } catch (IOException e) { e.printStackTrace(); }finally { fis.close(); } return valueList; } /** * 文件操作 获取文件扩展名 * * @Author: sunny * @param filename * 文件名称包含扩展名 * @return */ public static String getExtensionName(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (filename.length() - 1))) { return filename.substring(dot + 1); } } return filename; } /** * * @Title getCellValueForXssf * @Description (2007Excel数据类型转化) * @Param @param cell * @Param @return * @return String * @throws */ private static String getCellValueForXssf(XSSFCell cell) { DecimalFormat df = new DecimalFormat("#"); String cellValue=null; if (cell == null) return null; switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_NUMERIC: if(HSSFDateUtil.isCellDateFormatted(cell)){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); break; } cellValue=df.format(cell.getNumericCellValue()); break; case XSSFCell.CELL_TYPE_STRING: cellValue=String.valueOf(cell.getStringCellValue()); break; case XSSFCell.CELL_TYPE_FORMULA: cellValue=String.valueOf(cell.getCellFormula()); break; case XSSFCell.CELL_TYPE_BLANK: cellValue=null; break; case XSSFCell.CELL_TYPE_BOOLEAN: cellValue=String.valueOf(cell.getBooleanCellValue()); break; case XSSFCell.CELL_TYPE_ERROR: cellValue=String.valueOf(cell.getErrorCellValue()); break; } if(cellValue!=null&&cellValue.trim().length()<=0){ cellValue=null; } return cellValue; } /** * * @Title getCellValueForHssf * @Description ((2003Excel数据类型转化)) * @Param @param cell * @Param @return * @return String * @throws */ private static String getCellValueForHssf(HSSFCell cell) { DecimalFormat df = new DecimalFormat("#"); String cellValue=null; if (cell == null) return null; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: if(HSSFDateUtil.isCellDateFormatted(cell)){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); break; } cellValue=df.format(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: cellValue=String.valueOf(cell.getStringCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: cellValue=String.valueOf(cell.getCellFormula()); break; case HSSFCell.CELL_TYPE_BLANK: cellValue=null; break; case HSSFCell.CELL_TYPE_BOOLEAN: cellValue=String.valueOf(cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_ERROR: cellValue=String.valueOf(cell.getErrorCellValue()); break; } if(cellValue!=null&&cellValue.trim().length()<=0){ cellValue=null; } return cellValue; } public static void main(String[] args) { try { ExcelUtil.readExcel("d://车辆数据.xlsx"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
                 
                
               
              
          
         
        
       
上一篇:数据库细节
下一篇:跨域访问
网友评论