下载zip格式文件(压缩Excel文件为zip格式)
Mongodb配置文件参考这一篇:http://www.cnblogs.com/byteworld/p/5913061.html
package util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.sun.corba.se.spi.orbutil.fsm.Input; public class CreateExcel { /** * 把文件压缩到zip中 * @Description: * @param * @return void 返回类型 */ public static void createZip(String dir,OutputStream out){ // 用户目录下的文件 File[] f = new File("E:/"+dir).listFiles(); // 创建zip文件 ZipArchiveOutputStream zipOut = null; InputStream input = null; try { zipOut = new ZipArchiveOutputStream(out); zipOut.setEncoding("UTF-8"); zipOut.setUseZip64(Zip64Mode.AsNeeded); // 遍历目录下的文件 for(File file:f){ if (file != null) { ZipArchiveEntry zipEntry = new ZipArchiveEntry(file, file.getName()); zipOut.putArchiveEntry(zipEntry); // 读取文件 input = new BufferedInputStream(new FileInputStream(file)); byte[] buff = new byte[1024]; int len = 0; while((len = input.read(buff)) != -1){ zipOut.write(buff, 0, len); } zipOut.closeArchiveEntry(); } } } catch (IOException e) { e.printStackTrace(); }finally{ if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } if (zipOut != null) { try { zipOut.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 创建Excel文件到本地 * @Description: * @param * @return void 返回类型 */ public static void createExcel(String userid,String file,DBCursor cursor){ // 根据用户名创建文件夹 File dir = new File("E:/" + userid); if (!dir.isDirectory()) { dir.mkdirs(); } Workbook book = new HSSFWorkbook(); // 获取标题 DBObject ob = cursor.toArray().get(0); ArrayList<String> title = new ArrayList<>(); for(String key:ob.keySet()){ if (key.equals("_id")) { continue; } title.add(key); } // 创建sheet Sheet sheet = book.createSheet(); OutputStream out = null; try { // 写入标题栏 Row row = null; // 标题栏的行数 Cell cell = null; for(int i = 0;i< (cursor.count() + 1);i++){ // 标题栏 if (i == 0) { row = sheet.createRow(i); for (int j = 0; j < title.size(); j++) { cell = row.createCell(j); // 设置标题栏 cell.setCellValue(title.get(j)); } continue; } // 写入数据 row = sheet.createRow(i); out = new FileOutputStream(dir+"/"+file); DBObject obj = null; for (int j = 0; j < title.size(); j++) { cell = row.createCell(j); obj = cursor.toArray().get(j); for(String key :obj.keySet()){ if (key.equals("_id")) { continue; } if (key.equals(title.get(j))) { cell.setCellValue((String)(obj.get(key))); } } } } // 写入到excel book.write(out); } catch (IOException e1) { e1.printStackTrace(); } finally { try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form method="post"> <a href="/Demo/SimpleDown"><h2>下载</h2></a> </form> </body> </html>
Servlet:
package servlet; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipOutputStream; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import com.mongodb.DBCollection; import util.CreateExcel; import util.DBConn; /** * 单独文件的zip下载 */ @WebServlet("/SimpleDown") public class SimpleDown extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public SimpleDown() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //DBCollection conn = DBConn.getConn(); DBCollection conn = DBConn.getConn(); CreateExcel.createExcel("User2323","weixin_data.xls", conn.find()); //createZip("User2323"); // CreateExcel.delZip("User2323"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment;filename="+"User2323.zip"); CreateExcel.createZip("User2323", response.getOutputStream()); } }