打包zip文件并下载

来源:互联网 发布:游族网络股票行情 编辑:程序博客网 时间:2024/05/13 03:29

项目开发中用到zip打包功能,并支持下载。

依赖的jar包:org.apache.tools.jar

具体代码:

package com.test;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;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.net.URLEncoder;import java.util.ArrayList;import java.util.Date;import java.util.List;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;/** * @author WangSl * @Create Time jun 20, 2011 12:14:03 PM * @version 1.0 ant.jar */public class TestCreateZip {public static void testZip() {try {List<File> files = new ArrayList<File>();//目录要提前存在,没有则创建,文件也是File file1 = new File("d:\\test\\log_network.txt");File file2 = new File("d:\\test\\test1.txt");File file3 = new File("d:\\test\\0606.xlsx");files.add(file1);files.add(file2);files.add(file3);//创建一个临时压缩文件,把文件流全部注入到这个文件中 这里的文件你可以自定义是.rar还是.zipString strdate = "20120817025";File file = new File("c:\\" + strdate + "视频文件.zip");if (!file.exists()) {file.createNewFile();}//创建文件输出流FileOutputStream fous = new FileOutputStream(file);//打包的方法会用到ZipOutputStream这样一个输出流, 所以这里把输出流转换一下ZipOutputStream zipOut = new ZipOutputStream(fous);//要打包文件的集合, 还有一个ZipOutputStreamzipFile(files, zipOut);zipOut.close();fous.close();// files.delete();//删除已经存在的文件,此处根据需要注释与不注释} catch (Exception e) {e.printStackTrace();}}/** * 文件打成压缩包 * @param List<File>; * @param org.apache.tools.zip.ZipOutputStream */public static void zipFile(List files,org.apache.tools.zip.ZipOutputStream outputStream) {if (files != null && !files.isEmpty()) {int size = files.size();for (int i = 0; i < size; i++) {File file = (File) files.get(i);zipFile(file, outputStream);}}}/** * 根据输入的文件与输出流对文件进行打包 * @param File * @param org.apache.tools.zip.ZipOutputStream */public static void zipFile(File inputFile,org.apache.tools.zip.ZipOutputStream ouputStream) {try {if (inputFile.exists()) {//是目录不采取操作if (inputFile.isFile()) {FileInputStream IN = new FileInputStream(inputFile);BufferedInputStream bins = new BufferedInputStream(IN, 512);// org.apache.tools.zip.ZipEntryZipEntry entry = new ZipEntry(inputFile.getName());ouputStream.setEncoding("UTF-8");ouputStream.putNextEntry(entry);// 向压缩文件中输出数据int nNumber;byte[] buffer = new byte[512];while ((nNumber = bins.read(buffer)) != -1) {ouputStream.write(buffer, 0, nNumber);}// 关闭创建的流对象bins.close();IN.close();} else {try {File[] files = inputFile.listFiles();for (int i = 0; i < files.length; i++) {zipFile(files[i], ouputStream);}} catch (Exception e) {e.printStackTrace();}}}} catch (Exception e) {e.printStackTrace();}}public static void main(String args[]) {testZip();}}




原创粉丝点击