用java实现zip压缩解压缩(org.apache.tools.zip)

需要ant.jar包中的org.apache.tools.zip,能够压缩和解压缩用中文命名的文件。

 实现压缩

import  java.io.BufferedOutputStream;
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileOutputStream;
import  java.io.InputStream;
import  java.util.ArrayList;
import  java.util.List;
import  java.util.zip.CRC32;
import  java.util.zip.CheckedOutputStream;

import  org.apache.tools.zip.ZipEntry;
import  org.apache.tools.zip.ZipOutputStream;

/**
 * 
@author  ourife
 * 
@version  创建时间:Jun 29, 2007 11:41:41 AM
 * 压缩文件
 
*/
public   class  Zip {
    
    
private   static  List list  =   new  ArrayList();
    
    
public   static   void  main(String argv[]) {
        
try  {
            
byte  b[]  =   new   byte [ 512 ];
            
            
// 压缩文件的保存路径
            String zipFile  =   " D:/testzip/test.zip " ;
            
            
// 压缩文件目录
            String filepath  =   " D:/testzip/ " ;
            
            List fileList 
=  allFile(filepath);
            
            FileOutputStream fileOutputStream 
=   new  FileOutputStream(zipFile);
            
// 使用输出流检查
            CheckedOutputStream cs  =   new  CheckedOutputStream(fileOutputStream,  new  CRC32());
            
// 声明输出zip流
            ZipOutputStream out  =   new  ZipOutputStream( new  BufferedOutputStream(
                    cs));
            
            
for  ( int  i  =   0 ; i  <  fileList.size(); i ++ ) {
               InputStream in 
=   new  FileInputStream((String)fileList.get(i));
               String fileName 
=  ((String)(fileList.get(i))).replace(File.separatorChar, ' / ' );
               System.out.println(
" ziping  "   +  fileName);
               fileName 
=  fileName.substring(fileName.indexOf( " / " ) + 1 );
               ZipEntry e 
=   new  ZipEntry(fileName);
               out.putNextEntry(e);
               
int  len  =   0 ;
               
while ((len  =  in.read(b))  !=   - 1 ) {
                   out.write(b,
0 ,len);
                 }
               out.closeEntry();
            }
            out.close();  
            System.out.println(
" done! " );
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
    }
    
    
private   static  List allFile(String path)
    {       
        File file 
=   new  File(path);
        String[] array 
=   null ;
        String sTemp 
=   "" ;
                

        
if (file.isDirectory())
        {
        }
else {
            
return   null ;
        }
        array
=  file.list();
        
if (array.length > 0 )
        {
            
for ( int  i = 0 ;i < array.length;i ++ )
            {
                sTemp 
=  path + array[i];
                file 
=   new  File(sTemp);
                
if (file.isDirectory())
                {
                    allFile(sTemp
+ " / " );

                }
else {
                    list.add(sTemp);
                }
            }
        }
else {
            
return   null ;
        }

        
return  list;
    }    

}

 

实现解压缩

import  java.io.File;
import  java.io.FileOutputStream;
import  java.io.InputStream;
import  java.util.Enumeration;

import  org.apache.tools.zip.ZipEntry;
import  org.apache.tools.zip.ZipFile;

/**
 * 
@author  ourife
 * 
@version  创建时间:Jun 29, 2007 11:51:52 AM 
 *  解压缩文件
 
*/
public   class  UnZip {

    
public   static   void  main(String argv[]) {
        
try  {
            String outputDirectory 
=   " D:/testzip/ " ;
            ZipFile zipFile 
=   new  ZipFile( " D:/testzip/test.zip " );
            Enumeration e 
=  zipFile.getEntries();
            ZipEntry zipEntry 
=   null ;
            createDirectory(outputDirectory, 
"" );
            
while  (e.hasMoreElements()) {
                zipEntry 
=  (ZipEntry) e.nextElement();
                System.out.println(
" unziping  "   +  zipEntry.getName());
                
if  (zipEntry.isDirectory()) {
                    String name 
=  zipEntry.getName();
                    name 
=  name.substring( 0 , name.length()  -   1 );
                    File f 
=   new  File(outputDirectory  +  File.separator  +  name);
                    f.mkdir();
                } 
else  {
                    String fileName 
=  zipEntry.getName();
                    fileName 
=  fileName.replace( ' / ' ' / ' );
                    
if  (fileName.indexOf( " / " !=   - 1 ) {
                        createDirectory(outputDirectory, fileName.substring(
0 ,fileName.lastIndexOf( " / " )));
                    }

                    File f 
=   new  File(outputDirectory
                            
+  zipEntry.getName());

                    f.createNewFile();
                    InputStream in 
=  zipFile.getInputStream(zipEntry);
                    FileOutputStream out 
=   new  FileOutputStream(f);

                    
byte [] by  =   new   byte [ 1024 ];
                    
int  c;
                    
while  ((c  =  in.read(by))  !=   - 1 ) {
                        out.write(by, 
0 , c);
                    }
                    out.close();
                    in.close();
                }
            }
            System.out.println(
" done! " );
        } 
catch  (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
    }

    
private   static   void  createDirectory(String directory, String subDirectory) {
        String dir[];
        File fl 
=   new  File(directory);
        
try  {
            
if  (subDirectory  ==   ""   &&  fl.exists()  !=   true )
                fl.mkdir();
            
else   if  (subDirectory  !=   "" ) {
                dir 
=  subDirectory.replace( ' / ' ' / ' ).split( " / " );
                
for  ( int  i  =   0 ; i  <  dir.length; i ++ ) {
                    File subFile 
=   new  File(directory  +  File.separator  +  dir[i]);
                    
if  (subFile.exists()  ==   false )
                        subFile.mkdir();
                    directory 
+=  File.separator  +  dir[i];
                }
            }
        } 
catch  (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值