org.beangle.commons.archiver.ZipUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.beangle.commons.archiver.ZipUtils.java

Source

/* Copyright c 2005-2012.
 * Licensed under GNU  LESSER General Public License, Version 3.
 * http://www.gnu.org/licenses
 */
package org.beangle.commons.archiver;

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.Enumeration;
import java.util.List;

import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.beangle.commons.collection.CollectUtils;

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

    public static File zip(List<String> fileNames, String zipPath) {
        return zip(fileNames, zipPath, null);
    }

    // 
    public static File zip(List<String> fileNames, String zipPath, String encoding) {
        try {
            FileOutputStream f = new FileOutputStream(zipPath);
            ZipArchiveOutputStream zos = (ZipArchiveOutputStream) new ArchiveStreamFactory()
                    .createArchiveOutputStream(ArchiveStreamFactory.ZIP, f);
            if (null != encoding) {
                zos.setEncoding(encoding);
            }
            for (int i = 0; i < fileNames.size(); i++) {
                String fileName = fileNames.get(i);
                String entryName = StringUtils.substringAfterLast(fileName, File.separator);
                ZipArchiveEntry entry = new ZipArchiveEntry(entryName);
                zos.putArchiveEntry(entry);
                FileInputStream fis = new FileInputStream(fileName);
                IOUtils.copy(fis, zos);
                fis.close();
                zos.closeArchiveEntry();
            }
            zos.close();
            return new File(zipPath);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static List<String> unzip(final File zipFile, final String destination) {
        return unzip(zipFile, destination, null);
    }

    public static List<String> unzip(final File zipFile, final String destination, String encoding) {
        List<String> fileNames = CollectUtils.newArrayList();
        String dest = destination;
        if (!destination.endsWith(File.separator)) {
            dest = destination + File.separator;
        }
        ZipFile file;
        try {
            file = null;
            if (null == encoding)
                file = new ZipFile(zipFile);
            else
                file = new ZipFile(zipFile, encoding);
            @SuppressWarnings("unchecked")
            Enumeration<ZipArchiveEntry> en = file.getEntries();
            ZipArchiveEntry ze = null;
            while (en.hasMoreElements()) {
                ze = en.nextElement();
                File f = new File(dest, ze.getName());
                if (ze.isDirectory()) {
                    f.mkdirs();
                    continue;
                } else {
                    f.getParentFile().mkdirs();
                    InputStream is = file.getInputStream(ze);
                    OutputStream os = new FileOutputStream(f);
                    IOUtils.copy(is, os);
                    is.close();
                    os.close();
                    fileNames.add(f.getAbsolutePath());
                }
            }
            file.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileNames;
    }

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