java zip递归压缩解压代码

ZIP压缩类

import  java.io.BufferedInputStream;
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.util.ArrayList;
import  java.util.List;
import  java.util.zip.ZipEntry;
import  java.util.zip.ZipOutputStream;

public   class  ZipCompress  ... {

    
/** *//**
     * 
@param args
     
*/

    
public static void main(String[] args) throws IOException ...{
        compress(
"D:/tomcat-5.5.20","d:/test/testZip.zip");
    }

    
/** *//**
     * 递归压缩文件
     * 
@param source 源路径,可以是文件,也可以目录
     * 
@param destinct  目标路径,压缩文件名
     * 
@throws IOException
     
*/

    
private static void compress(String source,String destinct) throws IOException ...{
        List fileList
=loadFilename(new File(source));
        ZipOutputStream zos
=new ZipOutputStream(new FileOutputStream(new File(destinct)));
        
        
byte[] buffere=new byte[8192];
        
int length;
        BufferedInputStream bis;
        
        
for(int i=0;i<fileList.size();i++...{
            File file
=(File) fileList.get(i);
            zos.putNextEntry(
new ZipEntry(getEntryName(source,file)));
            bis
=new BufferedInputStream(new FileInputStream(file));
            
            
while(true...{
                length
=bis.read(buffere);
                
if(length==-1break;
                zos.write(buffere,
0,length);
            }

            bis.close();
            zos.closeEntry();
        }

        zos.close();
    }

    
/** *//**
     * 递归获得该文件下所有文件名(不包括目录名)
     * 
@param file
     * 
@return
     
*/

    
private static List loadFilename(File file) ...{
        List filenameList
=new ArrayList();
        
if(file.isFile()) ...{
            filenameList.add(file);
        }

        
if(file.isDirectory()) ...{
            
for(File f:file.listFiles()) ...{
                filenameList.addAll(loadFilename(f));
            }

        }

        
return filenameList;
    }

    
/** *//**
     * 获得zip entry 字符串
     * 
@param base
     * 
@param file
     * 
@return
     
*/

    
private static String getEntryName(String base,File file) ...{
        File baseFile
=new File(base);
        String filename
=file.getPath();
        
//int index=filename.lastIndexOf(baseFile.getName());
        if(baseFile.getParentFile().getParentFile()==null)
            
return filename.substring(baseFile.getParent().length());
        
return filename.substring(baseFile.getParent().length()+1);
    }

}

 ZIP解压类

import  java.io.BufferedOutputStream;
import  java.io.File;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.util.Enumeration;
import  java.util.zip.ZipEntry;
import  java.util.zip.ZipFile;

public   class  ZipDecompression  ... {

    
/** *//**
     * 
@param args
     * 
@throws IOException 
     
*/

    
public static void main(String[] args) throws IOException ...{
        decompression(
"d:/test/testZip.zip","d:/test/un");
    }

    
/** *//**
     * 解压ZIP文件
     * 
@param zipFile  要解压的ZIP文件路径
     * 
@param destination  解压到哪里
     * 
@throws IOException
     
*/

    
public static void decompression(String zipFile,String destination) throws IOException ...{
        ZipFile zip
=new ZipFile(zipFile);
        Enumeration en
=zip.entries();
        ZipEntry entry
=null;
        
byte[] buffer=new byte[8192];
        
int length=-1;
        InputStream input
=null;
        BufferedOutputStream bos
=null;
        File file
=null;
        
        
while(en.hasMoreElements()) ...{
            entry
=(ZipEntry)en.nextElement();
            
if(entry.isDirectory()) ...{
                System.out.println(
"directory");
                
continue;
            }

            
            input
=zip.getInputStream(entry);
            file
=new File(destination,entry.getName());
            
if(!file.getParentFile().exists()) ...{
                file.getParentFile().mkdirs();
            }

            bos
=new BufferedOutputStream(new FileOutputStream(file));
            
            
while(true...{
                length
=input.read(buffer);
                
if(length==-1break;
                bos.write(buffer,
0,length);
            }

            bos.close();
            input.close();
        }

        zip.close();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值