导出到csv 文件(逗号分隔文件)不用poi 导出文件

csv 文件的注意事项: 以逗号分隔; 如果内容中已经存在了逗号,如果内容中已经存在了逗号;  对 其内容进行" 张,三"  这样进行两端加双引号转意思;

如果 数据原来就存在"   那么在 " 前面加上一个"  转义也就是"" 这样; 如 你"好   会转义为  你"" 好;  


        // 设置响应流编码 gbk  因为 excel 打开文件默认的编码 是gbk ; 所以需要在下面设置输出流的编码;
   //     response.setCharacterEncoding("gbk");


import sun.misc.BASE64Encoder;
import cn.itcast.estore.domain.Orderitem;

/**
 * 导出榜单
 *
 * @author seawind
 *
 */
public class ExportRankServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 需要榜单数据 ---- 从ServletContext 中获得榜单数据
        List<Orderitem> rank = (List<Orderitem>) getServletContext()
                .getAttribute("rank");
        // 文件下载功能  1 先设置两个头信息;
        // 设置文件类型 Content-Type (day20里面有)  getServletContext().getMimeType("rank.csv")获取改文件名的contenttype;
        response.setContentType(getServletContext().getMimeType("rank.csv"));
        // 以附件形式下载 Content-Disposition --- 附件名中文
        Date date = new Date(System.currentTimeMillis());// 构造java.sql.Date 当前时间
        String fileName = "estore商城销售排行榜_" + date + ".csv";

        // 设置附件中文名
        String agent = request.getHeader("user-agent");
        if (agent.contains("MSIE")) {
            // IE --- URL编码
            fileName = URLEncoder.encode(fileName, "utf-8");
        } else if (agent.contains("Mozilla")) {
            // 火狐
            BASE64Encoder base64Encoder = new BASE64Encoder();
            fileName = "=?UTF-8?B?"
                    + new String(base64Encoder.encode(fileName
                            .getBytes("UTF-8"))) + "?=";
        }

        response.setHeader("Content-Disposition", "attachment;filename="
                + fileName);

//--------------以上为设置头信息 ; -----------------





        // 设置响应流编码 gbk  因为 excel 打开文件默认的编码 是gbk ; 所以需要在这里设置输出流的编码;
        response.setCharacterEncoding("gbk");

        // 文件下载
        PrintWriter out = response.getWriter();
        // 先写表头
        out.println("排名,商品编号,名称,单价,销售数量");
        // 遍历榜单数据   
        for (int i = 0; i < rank.size(); i++) {
            Orderitem orderitem = rank.get(i);

            // 输出csv数据时,对商品名称 ,进行特殊处理 --- 转义 ,和"          因为这里只是productname可能含有, 或者
            out.println((i + 1) + "," + orderitem.getProduct().getId() + ","
                    + convert(orderitem.getProduct().getName()) + ","
                    + orderitem.getProduct().getPrice() + ","
                    + orderitem.getBuynum());
        }

        out.flush();
    }

    // 转义 商品名称中 , 和 "
    private String convert(String name) {
        // 如果name 中存在 " 转成 ""
        name = name.replace("\"", "\"\"");                    // 一个 "  转换为 ""     \ 为转义符号
        // 如果包含,返回 name 两端 添加 ""
        return "\"" + name + "\"";
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值