JAVA给文件打包zip

  对于多份文档同时下载的时候,很多用户更希望能够打包下载,使用java的程序猿,可以这样操作:

  jar:  commons-compress-1.9.jar

  http://commons.apache.org/proper/commons-compress/

  1、编写工具类:

package com.post.bank.finrisk.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;

import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;

/**
 * 打包工具类
 */
public class FileZipUtil {
    /**
     * 给多个文件打包
     * @param files 文件路劲数组
     * @param outputStream 
     * @return
     */
    public static boolean zip(String[] files,OutputStream outputStream) {
        try {
            ArchiveOutputStream zipStream = new ArchiveStreamFactory()
                    .createArchiveOutputStream(ArchiveStreamFactory.ZIP,
                            outputStream);
            //打包过程
            for (String filePath : files) {
                File file = new File(filePath);
                ZipArchiveEntry entry = new ZipArchiveEntry(file, file.getName());
                zipStream.putArchiveEntry(entry);

                FileInputStream fis = new FileInputStream(file);
                byte[] buf = new byte[1024];
                int len = 0;
                while ((len = fis.read(buf)) > 0) {
                    zipStream.write(buf, 0, len);
                }
                fis.close();
                zipStream.closeArchiveEntry();
            }
            zipStream.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

  2、web应用中调用例子,构造文件数组即可

        //多个文件打包输出处理
        response.reset(); //清空流文件头
         //设定输出文件头 
        String filedisplay = "测试表词条集合";
        filedisplay = URLEncoder.encode(filedisplay, "UTF-8");
        response.addHeader("Content-Disposition", "attachment;filename="+ filedisplay+".zip");
        response.setContentType("application/zip");
        OutputStream outputStream = response.getOutputStream();
        //打包处理
        FileZipUtil.zip(files, outputStream);
        outputStream.flush();
        //输出后删除相应的文件
        for (String path : files) {
            File file = new File(path);  
            // 路径为文件且不为空则进行删除  
            if (file.isFile() && file.exists()) {  
                file.delete();
            }  
        }        

 

posted @ 2014-12-01 10:19  Hi-好好  阅读(881)  评论(0)    收藏  举报