easyexcel 写 文件流存ftp

该博客展示了如何使用EasyExcel将Excel数据转换为链接和节点信息,并通过FTP上传到特定路径,涉及数据处理、文件操作和网络传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
     * @param excel 数据
     */
    @Override
    public void write(circuitExcel excel) {
        String funName = excel.getFunName();
        List<linkInfo> linkInfo = excel.getLinkInfo();
        linkInfo.get(0).setName(funName);
        List<nodeInfo> nodeInfo = excel.getNodeInfo();
        nodeInfo.get(0).setName(funName);
        String fileName = System.currentTimeMillis() + ".xlsx";
        ExcelWriter writer = null;
        ByteArrayOutputStream os = null;
        InputStream in = null;
        try {

            os = new ByteArrayOutputStream();
            // 这里 指定文件
            writer = EasyExcel.write(os).build();

            WriteSheet writeSheet = EasyExcel.writerSheet(0, funName).head(linkInfo.class).build();
            // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
            writer.write(linkInfo, writeSheet);
            WriteSheet D01 = EasyExcel.writerSheet(1, "D01").head(nodeInfo.class).build();
            writer.write(nodeInfo, D01);
            //重点 必须finish才能拿到 要不然下载下来也是 格式损坏
            writer.finish();
            FTPClient ftpClient = ftpUtils.initFtpClient();
            byte[] bytes = os.toByteArray();
            in = new ByteArrayInputStream(bytes);
            ftpUtils.uploadFiles(ftpClient, "/test", in, fileName);
            ftpUtils.dropFtpClient(ftpClient);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            getClose(in);
            getClose(os);
            // 千万别忘记close 会帮忙关闭流
            if (writer != null) {
                writer.close();
            }
        }
    }
### 如何使用 EasyExcel 导出文件并获取输出流 为了实现通过 EasyExcel 将数据导出至 Excel 文件的同时获得输出流,可以采用 `ServletOutputStream` 或者 `ByteArrayOutputStream` 来处理。下面展示了一个具体的 Java 示例代码来说明这一过程。 ```java import com.alibaba.excel.EasyExcel; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URLEncoder; import java.util.List; public class ExportService { /** * 使用EasyExcel导出数据到浏览器下载, 同时返回字节数组输出流. * * @param response HTTP响应对象 * @throws IOException IO异常 */ public void exportToBrowser(HttpServletResponse response) throws IOException { // 设置HTTP响应头信息以便于前端能够识别为文件下载 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); // 获取请求参数中的filename,并对其进行URL编码防止中文乱码 String fileName = URLEncoder.encode("example", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); try (// 创建内缓冲区用于储临时的数据 ByteArrayOutputStream out = new ByteArrayOutputStream()) { List<Person> data = getData(); // 假设这里是从数据库或其他地方取得要入Excel的数据列表 // 调用EasyExcel工具类方法出数据到指定的输出流中 EasyExcel.write(out, Person.class).sheet("Sheet1").doWrite(data); // 输出给客户端 ServletOutputStream outputStream = response.getOutputStream(); out.writeTo(outputStream); outputStream.flush(); } } } ``` 上述代码展示了如何设置 HTTP 响应头部以及创建合适的输出流以供 EasyExcel 库调用来完成实际的数据操作[^1]。此外还定义了 `Person` 类作为实体模型,该类包含了三个属性字段及其对应的注解配置[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值