public void exportCSVFile(

	HttpServletResponse response, ResultSet rs,String fileName,String headers) throws SQLException {

		OutputStream o = null;

		try {
// String headers = "用户名, 操作时间, 操作模块, 操作内容";// 标题
headers += "\n";
List<Log> logList = new ArrayList<Log>(); Log logs = null;
while (rs.next()) {
logs = new Log();
logs.setUser(rs.getString(1));
logs.setDatetime(rs.getString(2));
logs.setModule(rs.getString(3));
logs.setContent(rs.getString(4));
logList.add(logs);
} if (logList.size() > 0) { for (int i = 0; i < logList.size(); i++) { Log logs1 = logList.get(i); headers += logs1.getUser() + ",";
headers += logs1.getDatetime() + ",";
headers += logs1.getModule() + ",";
headers += logs1.getContent(); headers += "\n"; }
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String dateNowStr = sdf.format(d);
// String fileNames = "导出操作日志数据" + dateNowStr+".csv";
String fileNames = fileName + dateNowStr+".csv"; System.out.println(fileNames);
response.setContentType("application/download;charset=GBK"); response.setContentType("Content-type:application/vnd.ms-excel;charset=GBK"); response.setHeader("Content-Disposition", "attachment;filename="
+ new String(fileNames.getBytes("utf-8"), "iso8859-1"));// 设置头信息
o = response.getOutputStream();
o.write(headers.toString().getBytes("GBK")); } } catch (IOException e) { e.printStackTrace(); } finally { if (o != null) { try { o.close(); } catch (IOException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } } }

  

String headers = "用户名, 操作时间, 操作模块, 操作内容";// 标题
String fileName = "导出操作日志数据";
exportCSVFile(response, rs, fileName, headers);

----------------------------------------------

前几天,做的导出csv文件,有个bug,如果服,务器是linux,部署到服务器上就不能导出,后来查出,是导出到了服务器,没有下载到浏览器,

用这个方法,要注意,字节流和字符流的冲突问题;
response.getOutputStream();

PrintWriter out = response.getWriter();

可以将提示写在前台;只用字节流

最新文章

  1. c#知识点总结
  2. 大叔也说并行和串行`性能提升N倍(N由操作系统位数和cpu核数决定)
  3. LOL
  4. visual studio 的Error List 显示乱码
  5. Java并发编程实战(使用synchronized实现同步方法)
  6. [python]在场景中理解装饰器
  7. linq lambda 分组后排序
  8. 360 chrome不能登录Google账户
  9. Linux开机启动流程
  10. csdn 刷分小工具(刷了1000多被封了,慎用)
  11. JavaScript HTML DOM - 改变 HTML
  12. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)
  13. Appnium-API-Session
  14. URL.createObjectURL() 实现本地上传图片 并预览功能
  15. 宝塔MySQL服务自动停止重启的解决方法
  16. Teradata简介
  17. SSD 为什么顺序写比随机写性能更好?
  18. Python——序列
  19. XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem A. Arithmetic Derivative
  20. 关于js中的原型链的理解

热门文章

  1. WPF知识点全攻略07- 数据绑定(Binding)
  2. bxslider 使用帮助
  3. CAD交互绘制矩形批注(网页版)
  4. Philipp Wagner
  5. ios copy assign retain
  6. JS数组专题2️⃣ ➖ 数组去重
  7. mysql的字符串处理函数用法
  8. UVa-208 Firetruck (图的DFS)
  9. PAT Basic 1039
  10. 使用Lucene的java api 写入和读取索引库