栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot 通过io流的方式和文件地址的方式导出文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot 通过io流的方式和文件地址的方式导出文件

1、通过io流的方式导出

a.编写工具类

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 java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


public class ExportExcelUtil {

    public static byte[] exportExcel(String sheetTitle, String[] title, List list) {

        HSSFWorkbook wb = new HSSFWorkbook();

        // 创建工作区
        Sheet sheet = wb.createSheet(sheetTitle);

        // 创建表头
        Row row = sheet.createRow(0);
        row.setHeightInPoints(20);

        // 设置标题: 第1行用于设置字段名
        Row rowTitle = sheet.createRow(0);
        rowTitle.setHeightInPoints(20);
        // 字段名一一赋值,
        Cell fillCell;
        for (int i = 0; i < title.length; i++) {
            fillCell = rowTitle.createCell(i);
            fillCell.setCellValue(title[i]);
        }

        byte result[] = null;
        ByteArrayOutputStream output = null;

        try {
            // 创建表格数据
            Field[] fields;
            int i = 1;

            for (Object rowObj : list) {


                // 反射获取对象数组
                fields = rowObj.getClass().getDeclaredFields();
                // 创建行
                Row rowBody = sheet.createRow(i);
                // 设置行高
                rowBody.setHeightInPoints(20);
                int j = 0;
                // 获取一个实体类对象的属性名
                for (Field field : fields) {
                    // 如果类中的成员变量为private,必须进行此操作
                    field.setAccessible(true);
                    // 获得对应实体类对象对应属性名的值,比如: field = id, 则 entityObj 就是 id对应的值
                    Object entityObj = field.get(rowObj);

                    // 如果取的值为null,则置"", 否则导出出现异常
                    if (entityObj == null) {
                        entityObj = "";
                    }
                    // 创建单元格
                    fillCell = rowBody.createCell(j);
                    fillCell.setCellValue(entityObj.toString());

                    j++;
                }
                i++;
            }
            output = new ByteArrayOutputStream();
            // 生成的excel写入字符流中
            wb.write(output);
            // 转换成字节数组
            result = output.toByteArray();
        } catch (Exception ex) {
            Logger.getLogger(ExportExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                if (null != output) {
                    output.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(ExportExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    wb.close();
                } catch (IOException ex) {
                    Logger.getLogger(ExportExcelUtil.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return result;
    }
}


b.编写接口

    @GetMapping("/exportStuScoresExcel")
    public void exportStuScoreExcel(HttpServletResponse response, Student st) throws UnsupportedEncodingException {
        String id = st.getId();
        System.out.println();
        String[] heads = {"姓名", "年龄"};
        List list = new ArrayList<>();
        Student s = new Student();
        s.setId("1");
        s.setName("2");
        list.add(s);
        byte[] Excel = ExportExcelUtil.exportExcel("学生成绩", heads, list); // 调用工具类
        String fileName = "sdd";
        // 响应设置
       response.addHeader("Content-Disposition", "attachment;filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));//这种方式mac和windows导出的文件名就不会乱码
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/octet-stream");
        response.addHeader("Content-Transfer-Encoding", "binary");
        ServletOutputStream outputStream = null;
        try {
            response.setStatus(HttpStatus.OK.value());
            outputStream = response.getOutputStream();
            outputStream.write(Excel);
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
2、存到服务器上

导出csv文件

 String filename = "xxx.csv";
 File file = new File(filePath);
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
 csvWriter = new CsvWriter(bw, ',');
 csvWriter.setForceQualifier(true);
 csvWriter.setUseTextQualifier(true);
 String[] vs = new String[]{"a","b"};
 csvWriter.writeRecord(vs);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号