diff --git a/WebContent/WEB-INF/lib/apache-ant-zip.jar b/WebContent/WEB-INF/lib/apache-ant-zip.jar new file mode 100644 index 00000000..61dbfb33 Binary files /dev/null and b/WebContent/WEB-INF/lib/apache-ant-zip.jar differ diff --git a/src/com/platform/controller/FilePackageController.java b/src/com/platform/controller/FilePackageController.java new file mode 100644 index 00000000..ebd64072 --- /dev/null +++ b/src/com/platform/controller/FilePackageController.java @@ -0,0 +1,24 @@ +package com.platform.controller; + +import java.io.File; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.base.BaseController; +import com.platform.utils.ZipCompressUtils; + +@Controller +@RequestMapping("/filePackage") +public class FilePackageController extends BaseController { + + @RequestMapping("download") + public void downloadFile(HttpServletRequest request, + HttpServletResponse response) { + ZipCompressUtils.zip(new File("D:\\20160906-汇总-V2.4"), "D:\\文件包.zip"); + + } +} diff --git a/src/com/platform/utils/ZipCompressUtils.java b/src/com/platform/utils/ZipCompressUtils.java new file mode 100644 index 00000000..52531881 --- /dev/null +++ b/src/com/platform/utils/ZipCompressUtils.java @@ -0,0 +1,67 @@ +package com.platform.utils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import org.apache.log4j.Logger; +import org.apache.tools.zip.ZipEntry; +import org.apache.tools.zip.ZipOutputStream; + +public class ZipCompressUtils { + private static Logger logger = Logger.getLogger(ZipCompressUtils.class); + + public static void zip(File inputFile, String zipFileName) { + try { + // 解决中文文件夹名乱码的问题 + FileOutputStream fos = new FileOutputStream(new String( + zipFileName.getBytes("UTF-8"))); + ZipOutputStream zos = new ZipOutputStream(fos); // 将文件输出流与zip输出流接起来 + logger.info("压缩-->开始"); + zip(zos, inputFile, ""); + logger.info("压缩结束"); + zos.close(); + } catch (Exception e) { + // TODO: handle exception + } + } + + public static void zip(ZipOutputStream zos, File file, String base) { + try { + // 如果句柄是文件夹 + if (file.isDirectory()) { + File[] files = file.listFiles(); // 获取文件夹下的子文件或子目录 + zos.putNextEntry(new ZipEntry(base + "/")); + logger.info("目录名:" + file.getName() + "|加入ZIP条目:" + base + "/"); + base = (base.length() == 0 ? "" : base + "/"); + // 遍历目录下的文件 + for (int i = 0; i < files.length; i++) { + // 递归进入本方法 + zip(zos, files[i], base + files[i].getName()); + } + } else { // 如果句柄是文件 + if (base == "") + base = file.getName(); + zos.putNextEntry(new ZipEntry(base)); // 填入文件句柄 + logger.info("文件名:" + file.getName() + "|加入ZIP条目:" + base); + // 开始压缩 + // 从文件入流读,写入ZIP 出流 + writeFile(zos, file); + } + } catch (Exception e) { + // TODO: handle exception + } + } + + public static void writeFile(ZipOutputStream zos, File file) + throws IOException { + logger.info("开始压缩" + file.getName()); + FileInputStream fis = new FileInputStream(file); + int len; + while ((len = fis.read()) != -1) + zos.write(len); + logger.info("压缩结束"); + fis.close(); + } +}