随笔-46  评论-54  文章-0  trackbacks-0

Java多层目录打包和解压代码(apache commons compress, io, lang)

 

package zip;

 

import java.io.BufferedOutputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Enumeration;

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.io.FileUtils;

import org.apache.commons.io.IOUtils;

import org.apache.commons.lang.StringUtils;

 

public class Main {

 

    public static void main(String[] args) throws FileNotFoundException, Exception {

        Main main = new Main("c:/test1.zip");

        main.createZipOut();

        main.packToolFiles("C:/test", "");

        main.closeZipOut();

 

        main = new Main("c:/test2.zip");

        main.createZipOut();

        main.packToolFiles("C:/test", "test");

        main.closeZipOut();

 

        Main.unZipToFolder("c:/test1.zip", "c:/test1");

        

        Main.unZipToFolder("c:/test2.zip", "c:/test2");

    }

    private OutputStream out = null;

    private BufferedOutputStream bos = null;

    private ZipArchiveOutputStream zaos = null;

    private String zipFileName = null;

 

    public Main(String zipname) {

        this.zipFileName = zipname;

    }

 

    public void createZipOut() throws FileNotFoundException, IOException {

        File f = new File(zipFileName);

        out = new FileOutputStream(f);

        bos = new BufferedOutputStream(out);

        zaos = new ZipArchiveOutputStream(bos);

        zaos.setEncoding("GBK");

 

    }

 

    public void closeZipOut() throws Exception {

        zaos.flush();

        zaos.close();

 

        bos.flush();

        bos.close();

 

        out.flush();

        out.close();

    }

 

    /**

     * 把一个目录打包到zip文件中的某目录

     * @param dirpath   目录绝对地址

     * @param pathName  zip中目录

     */

    public void packToolFiles(String dirpath, String pathName) throws FileNotFoundException, IOException {

        if (StringUtils.isNotEmpty(pathName)) {

            pathName = pathName + File.separator;

        }

        packToolFiles(zaos, dirpath, pathName);

    }

 

    /**

     * 把一个目录打包到一个指定的zip文件中

     * @param dirpath           目录绝对地址

     * @param pathName       zip文件抽象地址

     */

    public void packToolFiles(ZipArchiveOutputStream zaos, String dirpath, String pathName) throws FileNotFoundException, IOException {

 

        ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();

        BufferedOutputStream tempbos = new BufferedOutputStream(tempbaos);

 

        File dir = new File(dirpath);

        //返回此绝对路径下的文件

        File[] files = dir.listFiles();

        if (files == null || files.length < 1) {

            return;

        }

        for (int i = 0; i < files.length; i++) {

            //判断此文件是否是一个文件夹

            if (files[i].isDirectory()) {

                packToolFiles(zaos, files[i].getAbsolutePath(), pathName + files[i].getName() + File.separator);

            } else {

                zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));

                IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);

                zaos.closeArchiveEntry();

 

            }

 

        }

 

        tempbaos.flush();

        tempbaos.close();

 

        tempbos.flush();

        tempbos.close();

    }

 

    /**

     * 把一个zip文件解压到一个指定的目录中

     * @param zipfilename   zip文件抽象地址

     * @param outputdir     目录绝对地址

     */

    public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {

        File zipfile = new File(zipfilename);

        if (zipfile.exists()) {

            outputdir = outputdir + File.separator;

            FileUtils.forceMkdir(new File(outputdir));

 

            ZipFile zf = new ZipFile(zipfile, "GBK");

            Enumeration zipArchiveEntrys = zf.getEntries();

            while (zipArchiveEntrys.hasMoreElements()) {

                ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();

                if (zipArchiveEntry.isDirectory()) {

                    FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName() + File.separator));

                } else {

                    IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils.openOutputStream(new File(outputdir + zipArchiveEntry.getName())));

                }

            }

        } else {

            throw new IOException("指定的解压文件不存在:\t" + zipfilename);

        }

    }

}

 

 

本文地址:http://docs.google.com/View?id=ajfmzbdvh8wz_60g2dhfkgg

 

posted on 2009-11-12 22:53 rox 阅读(3980) 评论(1)  编辑  收藏 所属分类: Java

评论:
# re: Java多层目录打包和解压代码(apache commons compress, io, lang)[未登录] 2014-07-23 17:06 | s
qwqw  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: