导出并下载csv格式的表格(逗号分隔文件)
以导出销售榜单为例
package cn.estore.web.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.estore.domain.BankItem;
/**
* 下载 排行榜单 CSV格式
*
* @author seawind
*
*/
public class ExportServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1、获得session中排行榜单
List<BankItem> banklist = (List<BankItem>) request.getSession()
.getAttribute("banklist");
// ************设置csv文件下载头信息**************
String fileName = "bank.csv";
// <span style="font-family: Arial, Helvetica, sans-serif;">************</span><span style="font-family: Arial, Helvetica, sans-serif;">设置文件类型**************</span>
response.setCharacterEncoding("gbk");
response.setContentType(getServletContext().getMimeType(fileName));
// **********设置以附件打开***********
response.setHeader("Content-Disposition", "attachment;filename="
+ fileName);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~核心代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 2、导出csv文件
PrintWriter pw = response.getWriter();
// 3、通过response输出流 输出csv文件
pw.println("排名,编号,名称,价格,销售数量");
for (int i = 0; i < banklist.size(); i++) {
BankItem bankItem = banklist.get(i);
pw.println((i + 1) + "," + bankItem.getId() + ","
+ convert(bankItem.getName()) + "," + bankItem.getPrice()
+ "," + bankItem.getNumber());
}
pw.close();
}
// 若输出信息含有特殊字符,处理csv 表格中特殊字符的方法
public String convert(String value) {
// 将value中" 换成""
value = value.replace("\"", "\"\"");
// 将回车换行符 换成换行符
value = value.replace("\r\n", "\n");
// 如果存在, 只要在value 两端加入 ""
return "\"" + value + "\"";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以上为核心代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}