zip压缩多个路径的文件或目录到指定zip

3/3/2017来源:C/C++教程人气:2239

package com.github.elizabetht.controller;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Zip
{
    PRivate static void zipDirectory(ZipOutputStream zos, String dirName,
                                     String basePath) throws Exception
    {
        File dir = new File(dirName);
        if (dir.exists())
        {
            File files[] = dir.listFiles();

            if (files.length > 0)
            {
                for (File file : files)
                {

                    if (file.isDirectory())
                    {
                        zipDirectory(zos, file.getPath(), basePath
                                + file.getName().substring(
                                file.getName().lastIndexOf(
                                        File.separator) + 1)
                                + File.separator);
                    }
                    else
                        zipFile(zos, file.getPath(), basePath);
                }
            }
            else
            {
                ZipEntry ze = new ZipEntry(basePath);
                zos.putNextEntry(ze);
            }
        }
    }

    private static void  zipFile(ZipOutputStream zos, String filename,
                                 String basePath) throws Exception
    {
        File file = new File(filename);

        if (file.exists())
        {

            FileInputStream fis = new FileInputStream(filename);
            ZipEntry ze = new ZipEntry(basePath + file.getName());

            zos.putNextEntry(ze);
            byte[] buffer = new byte[8192];
            int count = 0;
            while ((count = fis.read(buffer)) > 0)
            {
                zos.write(buffer, 0, count);
            }
            fis.close();
        }
    }

    public static void compress(String zipFilename, String... paths)
            throws Exception
    {
        compress(new FileOutputStream(zipFilename), paths);

    }

    public static void  compress(OutputStream os, String... paths)
            throws Exception
    {
        ZipOutputStream zos = new ZipOutputStream(os);

        for (String path : paths)
        {
            if(path.equals("")) continue;
            java.io.File file = new java.io.File(path);
            if (file.exists())
            {

                if (file.isDirectory())
                {
                    zipDirectory(zos, file.getPath(), file.getName() + File.separator);
                }
                else
                {
                    zipFile(zos, file.getPath(), "");
                }
            }
        }
        zos.close();
    }


    public static void main(String[] args) throws Exception{
        
	compress("E:/输出.zip","E:/草稿箱","E:/垃圾箱");    }}