上传

package com.hu.excel.exportExcel;

import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Properties;

// 反射学习
public class ReflexStudy {
    public void test(Student student) throws Exception{
        // 获得Class的3种方法
        Class stu = student.getClass();
        Class stu2 = Student.class;
        Class stu3 = Class.forName("com.hu.excel.exportExcel.Student");
        // getFields() 获得public修饰的所有成员变量
        // getField(String) 获得public修饰的指定的成员变量
        // getDeclaredFields() 获得所有成员变量,不管修饰符。
        // getDeclaredField(String) 获得指定成员变量,不管修饰符。
        Field[] fields1 = stu.getFields();
        Field field1 = stu.getField("id");
        Field[] declaredFields2 = stu.getDeclaredFields();
        Field declaredField2 = stu.getDeclaredField("id");
        for (Field field : declaredFields2) {
            // 忽略访问权限修饰符的安全检查,使可以操作非公有成员变量。 暴力反射
            field.setAccessible(true);
            // 设置成员变量的值
            field.set(student,2);
            // 获得成员变量的值
            Object object = field.get(student);

            System.out.println(field);
            System.out.println(object);
        }

        // 获得构造方法
        Constructor constructor = stu.getConstructor();
        // 实例一个对象
        Object object = constructor.newInstance();
        System.out.println(constructor);

        // getMethods()获得所有成员方法
        // getMethod(String name, Class<?>... parameterTypes)获得指定成员方法
        // getDeclaredMethods() 获得所有成员方法。
        // getDeclaredMethod(String name, Class<?>... parameterTypes) 获得指定成员方法。
        Method[] methods = stu.getMethods();
        Method method = stu.getMethod("getId");
        Method[] declaredMethods = stu.getDeclaredMethods();
        Method declaredMethod = stu.getDeclaredMethod("getAge");
        // 忽略访问权限修饰符的安全检查,使可以操作非公有成员方法。 暴力反射
        declaredMethod.setAccessible(true);
        // 执行方法
        Object string = declaredMethod.invoke(student);
        System.out.println("method"+string);

    }

    // 通过加载配置文件获得信息
    public void test2() throws Exception{
        // 1、加载配置文件
        // 1、1创建Properties对象
        Properties properties = new Properties();
        // 1、2加载配置文件
        // 1、2、1获得class目录下的配置文件
        ClassLoader classLoader = ReflexStudy.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("com/hu/excel/pro.properties");
        if(null!=is) {
            properties.load(is);
            // 2、获得配置文件中定义的数据
            String className = properties.getProperty("className");
            String methodName = properties.getProperty("classMethod");
            // 3、加载该类进内存
            Class cls = Class.forName(className);
            // 4、创建对象
            Object object = cls.newInstance();
            // 5、获得方法对象
            Method method = cls.getMethod(methodName);
            // 6、执行方法
            Object s =  method.invoke(object);
            System.out.println("通过加载配置文件获得信息" + s);
        }
    }
}

 

 

 

package com.hu.excel.exportExcel;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.NonNull;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 导入导出Excel工具类
 * @param <T>
 */
public class ExcelUtil<T> {
    static Logger logger = LoggerFactory.getLogger(ExcelUtil.class);

    private final static String excel2003L =".xls";    //2003- 版本的excel
    private final static String excel2007U =".xlsx";   //2007+ 版本的excel

    /**
     * 将数据导出到Excel中,并输出Excel
     * @param params 传入一个Map,键值对包含objects(数据)、headers(表头)类的字段(key)与表头(value)字段一一对应、
     *               sheetName(sheet名称)、filePath(Excel存放地址)
     * @return 提示成功导出。
     * @throws Exception IO异常
     */
    public String exportExcel(@NonNull Map<String, Object> params) throws Exception{
        List<T> objects = (List<T>)params.get("objects");
        logger.info("objects: "+objects);
        Map<String, String> headers = (Map<String, String>) params.get("headers"); // 类的字段与表头字段一一对应
        logger.info("headers: "+headers);
        String sheetName = (String)params.get("sheetName");
        logger.info("sheetName: "+sheetName);
        String filePath = (String)params.get("filePath");
        logger.info("filePath: "+filePath);
        Workbook workbook = new XSSFWorkbook(); //创建表格
        Sheet sheet = workbook.createSheet(sheetName); //创建sheet

        Set keySet = headers.keySet();
        Iterator iterator = keySet.iterator();
        List<String> headersParams =new ArrayList<String>();
        List<String> headersName =new ArrayList<String>();
        while (iterator.hasNext()) {
            String key = (String) iterator.next();
            headersParams.add(key);
            headersName.add(headers.get(key));
        }

        Row row = sheet.createRow(0);  //创建行,行的下标从0开始
        for(int i=0; i<headers.size(); i++){
            Cell cell = row.createCell(i); //创建单元格,下标从0开始
            cell.setCellValue(headersName.get(i));
        }
        for(int i=1; i<=objects.size(); i++){
            Row row1 = sheet.createRow(i);
            Class object = objects.get(i-1).getClass();
            for(int y=0; y<headers.size(); y++) {
                Field field = object.getDeclaredField(headersParams.get(y));
                String  value = field.get(objects.get(i-1)).toString();
                Cell cell = row1.createCell(y);
                cell.setCellValue(value);
            }
        }

        FileOutputStream fileOutputStream = new FileOutputStream(filePath); //"H:\\student\\test.xlsx");  //输出流,设置表格存储地址
        workbook.write(fileOutputStream);  //将表格输出
        fileOutputStream.close();  //关闭输出流
        logger.info("exportExcel is success!!!!!!!!!!!!!!");
        return "success";
    }

    /**
     * 将数据导入到程序中。
     * @param filePath 文件路径 ("H:\\student\\test.xlsx")
     * @param headerMap 类字段与表头对应(key为表头,value为字段)
     * @param param 类对象
     * @return 得到的类List
     * @throws Exception
     */
    public List<T> ImportExcel(String filePath,  Map<String, String> headerMap, T param) throws Exception{
        logger.info("filePath: "+filePath + "headerMap: "+headerMap + " param: "+ param.getClass());
        //FileInputStream inputStream = new FileInputStream("H:\\student\\test.xlsx");
        Workbook workbook = this.getText(filePath);
        Sheet sheet1 = null;
        Class tclass = param.getClass();
        List<T> list = new ArrayList<T>();
        for(int n = 0; n< workbook.getNumberOfSheets(); n++) {
            sheet1 = workbook.getSheetAt(n);
            if (sheet1 == null) {
                continue;
            }
            break;
        }
        Row row1 = sheet1.getRow(0);
        Short cellNum = row1.getLastCellNum();
        Object[] headers = new Object[cellNum];
        String[] headerMap1 = new String[cellNum];
        for (short y = 0; y < cellNum; y++) {
            Cell cell = row1.getCell(y);
            Object object = this.getCellValue(cell);
            headers[y] = object;
        }

        for(short y = 0; y < cellNum; y++){
            headerMap1[y] = headerMap.get(headers[y]);
        }

        for(int n = 0; n< workbook.getNumberOfSheets(); n++) {
            Sheet sheet = workbook.getSheetAt(n);
            if (sheet == null) {
                continue;
            }
            int lastRowNum = sheet.getLastRowNum();
            for (int i = 1; i <= lastRowNum; i++) {
                T t = (T) tclass.newInstance();
                Row row = sheet.getRow(i);
                if(null==row){
                    continue;

                }
                short lastCellNum = row.getLastCellNum();
                for (short y = 0; y < lastCellNum; y++) {
                    Cell cell = row.getCell(y);
                    if(null==cell){
                        continue;
                    }
                    Object cellValue = this.getCellValue(cell);
                    if(null!=headerMap1[y]) {
                        Field field = tclass.getDeclaredField(headerMap1[y]);
                        field.setAccessible(true);
                        Class  fieldType = field.getType() ;
                        String fieldTypeName = fieldType.getName();
                        if("java.lang.String".equals(fieldTypeName)){
                            field.set(t, (String)cellValue);
                            logger.info("cellValue"+i+": "+cellValue);
                        }else if("int".equals(fieldTypeName)){
                            int f = Integer.parseInt(cellValue.toString());
                            field.set(t, f);
                            logger.info("cellValue"+i+": "+cellValue);
                        }
                    }
                }
                list.add(t);
            }
        }
        return list;
    }

    /**
     * 判断导入的Excel的类型,并创建work
     * @param filePath 文件路径
     * @return work
     * @throws Exception
     */
    public Workbook getText(String filePath)throws Exception{
        Workbook workbook = null;
        FileInputStream inputStream = new FileInputStream(filePath);
        String fileExit = filePath.substring(filePath.lastIndexOf(".") + 1);
        if("xlsx".equals(fileExit)){
            workbook = new XSSFWorkbook(inputStream);
        }else if("xls".equals(workbook)){
            workbook = new HSSFWorkbook(inputStream);
        }else{
            throw new Exception("文件类型不正确!!!!!!!!!!!!!");
        }
        logger.info("workbook: "+workbook);
        return workbook;
    }

    /**
     * 描述:对表格中数值进行格式化
     * @param cell
     * @return
     */
    public  static Object getCellValue(Cell cell){
        Object value = null;
        DecimalFormat df = new DecimalFormat("0");  //格式化number String字符
        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd hh:mm:ss");  //日期格式化
        DecimalFormat df2 = new DecimalFormat("0.00");  //格式化数字

        switch (cell.getCellType()) {
            case STRING:
                value = cell.getRichStringCellValue().getString();
                break;
            case NUMERIC:
                value = cell.getNumericCellValue();
//                if("General".equals(cell.getCellStyle().getDataFormatString())){
//                    value = df.format(cell.getNumericCellValue();
//                }else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){
//                    value = sdf.format(cell.getDateCellValue());
//                }else{
//                    value = df2.format(cell.getNumericCellValue());
//                }
                break;
            case BOOLEAN:
                value = cell.getBooleanCellValue();
                break;
            case BLANK:
                value = "";
                break;
            default:
                break;
        }
        return value;
    }


    /**
     * 导出学习
     * @throws Exception
     */
    public void ExportWordsExcel() throws Exception{
        Workbook workbook = new XSSFWorkbook(); //创建表格
        Sheet sheet = workbook.createSheet("示例1"); //创建sheet
        Row row = sheet.createRow(0);  //创建行,行的下标从0开始
        Cell cell = row.createCell(0); //创建单元格,下标从0开始
        cell.setCellValue("胡展伟"); //向单元格添加数据

        FileOutputStream fileOutputStream = new FileOutputStream("H:\\student\\test.xlsx");  //输出流,设置表格存储地址
        workbook.write(fileOutputStream);  //将表格输出
        fileOutputStream.close();  //关闭输出流
    }

    /**
     * 导出图片学习
     * @throws Exception
     */
    public void ExportPictureExcel() throws Exception{
        Workbook workbook = new XSSFWorkbook(); //创建表格
        Sheet sheet = workbook.createSheet("示例2"); //创建sheet
        FileInputStream fiStream = new FileInputStream("C:\\Users\\胡展伟\\Pictures\\baoyang.jpg");
        int pictureIndex = ((XSSFWorkbook)workbook).addPicture(fiStream, Workbook.PICTURE_TYPE_JPEG);
        CreationHelper creationHelper = workbook.getCreationHelper();
        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
        ClientAnchor clientAnchor = creationHelper.createClientAnchor();
        clientAnchor.setRow1(0);
        clientAnchor.setCol1(0);
        Picture picture = drawingPatriarch.createPicture(clientAnchor, pictureIndex);
        picture.resize();
        FileOutputStream fileOutputStream = new FileOutputStream("H:\\student\\test.xlsx");  //输出流,设置表格存储地址
        workbook.write(fileOutputStream);  //将表格输出
        fileOutputStream.close();  //关闭输出流
    }

    /**
     * 导入学习
     * @throws Exception
     */
    public void ImportWordsExcel() throws Exception{
        FileInputStream inputStream = new FileInputStream("H:\\student\\test.xlsx");
        Workbook workbook = new XSSFWorkbook(inputStream);
        for(int n = 0; n< workbook.getNumberOfSheets(); n++) {
            Sheet sheet = workbook.getSheetAt(n);
            int lastRowNum = sheet.getLastRowNum();
            for (int i = 0; i <= lastRowNum; i++) {
                Row row = sheet.getRow(i);
                short lastCellNum = row.getLastCellNum();
                StringBuilder sb = new StringBuilder();
                for (int y = 0; y < lastCellNum; y++) {
                    Cell cell = row.getCell(y);
                    Object object = this.getCellValue(cell);
                            sb.append(object + " ");
                }
                System.out.println(sb);
            }
        }
    }

}

 

 

 

浏览器下载 文件
@Override
public ResponseEntity<Object> downloadEnclosure(long id) throws FileNotFoundException, UnsupportedEncodingException{
    FileConfig fileConfig = attachmentMapper.getFilePath(id);
    return this.downloadFile(fileConfig.getPath());
}

/**
 * 文件下载
 * @param path 文件保存路径
 * @return ResponseEntity
 * @throws FileNotFoundException 异常
 * @throws UnsupportedEncodingException 异常
 */
public ResponseEntity<Object> downloadFile(String path) throws FileNotFoundException, UnsupportedEncodingException {
    File file = new File(path);
    InputStreamResource resource = new InputStreamResource(new FileInputStream((file)));

    HttpHeaders headers = new HttpHeaders();
    String downloadFielName = new String(file.getName().getBytes("UTF-8"),"iso-8859-1");
    headers.add("Content-Disposition",  "attachment;filename=" + downloadFielName);
    headers.add("Cache-Control","no-cache,no-store,must-revalidate");
    headers.add("Pragma","no-cache");
    headers.add("Expires","0");

    ResponseEntity<Object> responseEntity = ResponseEntity.ok()
            .headers(headers)
            .contentLength(file.length())
            .contentType(MediaType.parseMediaType("application/text"))
            .body(resource);
    return responseEntity;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值