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;

/**
 * 文件流导出
 * @author 96109
 */
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<Student> 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);

Spring Boot导出Excel文件有很多种方式,以下是其中一种常用的方法: 1. 首先,你需要添加Apache POI依赖到你的项目中。在你的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建一个Excel导出的Controller,例如: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @RestController public class ExcelController { @GetMapping("/export") public void exportExcel(HttpServletResponse response) throws IOException { // 创建一个工作簿 Workbook workbook = new XSSFWorkbook(); // 创建一个工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row headerRow = sheet.createRow(0); Cell headerCell = headerRow.createCell(0); headerCell.setCellValue("姓名"); // 创建数据行 Row dataRow = sheet.createRow(1); Cell dataCell = dataRow.createCell(0); dataCell.setCellValue("张三"); // 设置响应头信息 response.setHeader("Content-Disposition", "attachment; filename=example.xlsx"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); // 将工作簿写入到输出流 workbook.write(response.getOutputStream()); workbook.close(); } } ``` 3. 启动你的Spring Boot应用程序,并访问`/export`路径,将会自动下载一个名为`example.xlsx`的Excel文件。 注意:上述示例代码只是一个简单的示例,你可以根据自己的需求来生成Excel文件。另外,还可以使用其他库如EasyExcel等来导出Excel文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值