org.beanfuse.archiver.ZipUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.beanfuse.archiver.ZipUtils.java

Source

//$Id: ZipUtils.java,v 1.1 2007-12-19 ?08:21:53 Administrator Exp $
/*
 *
 * Copyright c 2005-2009.
 * 
 * Licensed under GNU  LESSER General Public License, Version 3.  
 * http://www.gnu.org/licenses
 * 
 */
/********************************************************************************
 * @author Administrator
 * 
 * MODIFICATION DESCRIPTION
 * 
 * Name                 Date                Description 
 * ============         ============        ============
 * huanghaijun              2007-12-19         Created
 *  
 ********************************************************************************/

package org.beanfuse.archiver;

import java.io.DataInputStream;
import java.io.DataOutputStream;
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 java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipException;

import org.apache.commons.lang.StringUtils;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

public final class ZipUtils {
    /**
     * Don't let anyone instantiate this class.
     */
    private ZipUtils() {
    }

    public static List unzip(final File zipFile, final String destination) {
        List fileNames = new ArrayList();
        String dest = destination;
        if (!destination.endsWith(File.separator)) {
            dest = destination + File.separator;
        }

        ZipFile zf = null;
        try {
            zf = new ZipFile(zipFile);
            Enumeration enu = zf.getEntries();
            while (enu.hasMoreElements()) {
                ZipEntry entry = (ZipEntry) enu.nextElement();
                String name = entry.getName();
                String path = dest + name;
                File file = new File(path);
                if (entry.isDirectory()) {
                    file.mkdirs();
                } else {
                    InputStream is = zf.getInputStream(entry);
                    byte[] buf1 = new byte[1024];
                    int len;
                    if (!file.exists()) {
                        file.getParentFile().mkdirs();
                        file.createNewFile();
                    }
                    OutputStream out = new FileOutputStream(file);
                    while ((len = is.read(buf1)) > 0) {
                        out.write(buf1, 0, len);
                    }
                    out.flush();
                    out.close();
                    is.close();
                    fileNames.add(file.getAbsolutePath());
                }
            }
            zf.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if (null != zf) {
                try {
                    zf.close();
                } catch (IOException e) {
                }
            }
        }
        return fileNames;
    }

    // 
    public static File zip(List fileNames, String zipPath, String encoding) {
        try {
            FileOutputStream f = new FileOutputStream(zipPath);
            ZipOutputStream out = new ZipOutputStream(new DataOutputStream(f));
            out.setEncoding(encoding);
            for (int i = 0; i < fileNames.size(); i++) {
                DataInputStream in = new DataInputStream(new FileInputStream(fileNames.get(i).toString()));
                out.putNextEntry(new org.apache.tools.zip.ZipEntry(
                        StringUtils.substringAfterLast(fileNames.get(i).toString(), File.separator)));
                int c;
                while ((c = in.read()) != -1) {
                    out.write(c);
                }
                in.close();
            }
            out.close();
            return new File(zipPath);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static boolean isZipFile(File zipFile) {
        try {
            ZipFile zf = new ZipFile(zipFile);
            Enumeration a = zf.getEntries();
            boolean isZip = a.hasMoreElements();
            zf.close();
            return isZip;
        } catch (ZipException e) {
            return false;
        } catch (Exception e) {
            return false;
        }
    }
}