您的位置:首页 > 其它

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

2013-06-27 17:32 465 查看
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);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: