导出到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);
}
}
如果 数据原来就存在" 那么在 " 前面加上一个" 转义也就是"" 这样; 如 你"好 会转义为 你"" 好;
// 设置响应流编码 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);
}
}
相关文章推荐
- Mysql导出逗号分隔的csv文件
- 导出下载csv格式的表格(逗号分隔文件)的servlet代码,留待以后调用
- Mysql导出逗号分隔的csv文件
- 基于Java的CSV格式文件处理(excel逗号分隔符文件)
- java读取csv文件内容(逗号分隔、回车换行文本)
- 关于Excel保存为csv文件时提示“可能含有与CSV(逗号分隔)不兼容的功能”
- C++读取CSV文件,并将逗号分隔符文件分割成N个数组
- 利用Apache Common CSV读用逗号分隔的文件
- 用csv导出文件时,每个cell加上双引号后,可以原样输入cell中的内容,不管是否cell中是否包含逗号或者换行,但是如果包含双引号,则换行失效,解决方法如下
- C#获取CSV文件内容对逗号和引号分隔的处理
- Excel2007打开逗号分隔的csv文件不自动分列的问题解决方法
- CSV逗号分隔符文件解析
- C#获取csv文件内容对逗号和引号分隔的处理
- C#获取CSV文件内容对逗号和引号分隔的处理
- 用csv格式的文件代替poi导出xls文件
- excel表格另存为CSV文件时,如何使每个单元内容都带双引号和逗号分隔
- C#获取CSV文件内容对逗号和引号分隔的处理
- CSV(逗号分隔)、文本文件(制表符分隔) 等文件的读取
- php 生成Tab键或逗号分隔的CSV
- php导出CSV文件时身份证号码显示为科学计数的解决方法