一个zip压缩类,欢迎吐槽

package com.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.zte.ums.ems.rrucheck.output.OutputFilesFilter;

public class ZipUtil {

    private Logger logger;
    public ZipUtil() {
        logger=LoggerFactory.getLogger(ZipUtil.class);
    }
    public ZipUtil(Logger logger) {
        this.logger=logger;
    }

    public String zipAndDelSourceFiles_OMMB(String dir){
        
        String sourceNameRegex="(filename1|filename2)\\.csv";
        String targetFileName="zipname.zip";
        String zipFilePath = null;
        try {
            if (zip(dir,sourceNameRegex,targetFileName)) {
                zipFilePath=new File(dir,targetFileName).getCanonicalPath();
                FilePathUtil.del(dir, sourceNameRegex);
                zipFilePath=new File(dir,targetFileName).getCanonicalPath();
            }
        } catch (IOException e) {
            logger.error(e.getMessage());
        }
        return zipFilePath;
    }
    
    public boolean zip(String sourceFilePath,String sourceNameRegex,String targetFileName) throws IOException{

        File target=new File(sourceFilePath,targetFileName);
        File dir=target.getParentFile();
        
        File[] sourceFiles=dir.listFiles(new OutputFilesFilter(sourceNameRegex));

        return zip(sourceFiles,target);
    }
    
    public boolean zip(File[] sorceFiles,File targetZipFile){
        boolean result = false;
        try {
            FileOutputStream target = new FileOutputStream(targetZipFile);
            CheckedOutputStream cos = new CheckedOutputStream(target,
                    new Adler32());

            ZipOutputStream zos = new ZipOutputStream(cos);

            BufferedOutputStream out = new BufferedOutputStream(zos);

            DataInputStream in = null;
            try {
                for (File sorceFile : sorceFiles) {
                    zos.putNextEntry(new ZipEntry(sorceFile.getName()));
                    int count;

                    in = new DataInputStream(new BufferedInputStream(
                            new FileInputStream(sorceFile)));

                    while ((count = in.read()) != -1) {

                        out.write(count);

                    }
                    out.flush();
                    in.close();
                }
            } catch (IOException e) {
                logger.error(e.getMessage());
            } finally {
                try {
                    out.close();
                } catch (IOException e) {
                    logger.error(e.getMessage());
                }
            }

            result = true;

        } catch (FileNotFoundException e) {
            logger.error(e.getMessage());
        }
        return result;
    }
}

 

posted @ 2014-06-27 11:12  沧海一滴  阅读(320)  评论(0编辑  收藏  举报