当前位置:编程学习 > JAVA >>

Java解压缩zip - 解压缩多个文件或文件夹

Java解压缩zip - 多个文件(包括文件夹)


对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。

压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面...

[java] 
ZipFiles(zip,"abc",new File("d:/English"),new File("d:/发放数据.xls")); 

测试文件目录结构:

 

测试的压缩内容:English文件夹和同级的两个excel文件

[java]
File[] files = new File[]{new File("d:/English"),new File("d:/发放数据.xls"),new File("d:/中文名称.xls")}; 

下面是压缩的代码:
[java]
/**
     * 压缩文件-由于out要在递归调用外,所以封装一个方法用来
     * 调用ZipFiles(ZipOutputStream out,String path,File... srcFiles)
     * @param zip
     * @param path
     * @param srcFiles
     * @throws IOException
     * @author isea533
     */ 
    public static void ZipFiles(File zip,String path,File... srcFiles) throws IOException{ 
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zip)); 
        ZipTest.ZipFiles(out,path,srcFiles); 
        out.close(); 
        System.out.println("*****************压缩完毕*******************"); 
    } 
    /**
     * 压缩文件-File
     * @param zipFile  zip文件
     * @param srcFiles 被压缩源文件
     * @author isea533
     */ 
    public static void ZipFiles(ZipOutputStream out,String path,File... srcFiles){ 
        path = path.replaceAll("\\*", "/"); 
        if(!path.endsWith("/")){ 
            path+="/"; 
        } 
        byte[] buf = new byte[1024]; 
        try { 
            for(int i=0;i<srcFiles.length;i++){ 
                if(srcFiles[i].isDirectory()){ 
                    File[] files = srcFiles[i].listFiles(); 
                    String srcPath = srcFiles[i].getName(); 
                    srcPath = srcPath.replaceAll("\\*", "/"); 
                    if(!srcPath.endsWith("/")){ 
                        srcPath+="/"; 
                    } 
                    out.putNextEntry(new ZipEntry(path+srcPath)); 
                    ZipFiles(out,path+srcPath,files); 
                } 
                else{ 
                    FileInputStream in = new FileInputStream(srcFiles[i]); 
                    System.out.println(path + srcFiles[i].getName()); 
                    out.putNextEntry(new ZipEntry(path + srcFiles[i].getName())); 
                    int len; 
                    while((len=in.read(buf))>0){ 
                        out.write(buf,0,len); 
                    } 
                    out.closeEntry(); 
                    in.close(); 
                } 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 

在压缩的时候,针对文件夹进行判断,然后递归压缩文件。

 

 

然后是解压:

[java] 
/**
     * 解压到指定目录
     * @param zipPath
     * @param descDir
     * @author isea533
     */ 
    public static void unZipFiles(String zipPath,String descDir)throws IOException{ 
        unZipFiles(new File(zipPath), descDir); 
    } 
    /**
     * 解压文件到指定目录
     * @param zipFile
     * @param descDir
     * @author isea533
     */ 
    @SuppressWarnings("rawtypes") 
    public static void unZipFiles(File zipFile,String descDir)throws IOException{ 
        File pathFile = new File(descDir); 
        if(!pathFile.exists()){ 
            pathFile.mkdirs(); 
        } 
        ZipFile zip = new ZipFile(zipFile); 
        for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){ 
            ZipEntry en

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,