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

原创 2007年09月20日 13:45:00

需要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());
        }
    }

}

android通过org.apache.tools.zip解压zip压缩文件,支持中文名

由于java自带的解压缩包不能在压缩文件中存在中文名,使用apache的开发包可以支持中文。     首先需要下载org.apache.tools.zip的jar包【下载地址在此】,将此jar包复制...
  • Tovey19911011
  • Tovey19911011
  • 2013年03月07日 12:39
  • 2127

关于ZIP压缩问题 解决中文文件名乱码

用ant.jar进行ZIP压缩 这是一个类: package com.zipup; import java.io.BufferedInputStream;   import java.io...
  • xiahao86
  • xiahao86
  • 2013年01月11日 14:26
  • 13570

java实现zip的压缩和解压(支持中文文件名)

用过java做压缩或解压的都知道,jdk提供的zip只能按UTF-8格式处理,所有jdk提供的zip不能支持中文文件名采用Apache的zip包解决中文文件名问题(依赖 ant-1.9.6.jar...
  • tanksyg
  • tanksyg
  • 2015年11月19日 14:58
  • 5058

java中ant包中的org.apache.tools.zip实现压缩和解压缩

其实apache中的ant包(请自行GOOGLE之ant.jar)中有一个更好的类,已经支持中文了,我们就不重复制造轮子了,拿来用吧, 这里最主要的功能是实现了 可以指定多个文件 到同一个压缩包的功...
  • qq_26562641
  • qq_26562641
  • 2016年05月24日 10:07
  • 565

java压缩中文处理使用org.apache.tools.zip已经打包成jar

  • 2012年04月03日 18:16
  • 33KB
  • 下载

java压缩使用org.apache.tools.zip包解决中文文件名

  • 2011年05月07日 09:21
  • 85KB
  • 下载

支持递归压缩文件夹-org.apache.tools.zip.ZipEntry

问题场景压缩文件夹或者文件,要求可以压缩到文件夹里面CODEjar包package zip;import java.io.*;import org.apache.tools.zip.ZipEntry;...
  • sand_clock
  • sand_clock
  • 2017年06月07日 17:20
  • 341

利用org.apache.tools.zip.* 压缩、解压

jar包:ant.jar用到的package:org.apache.tools.zip.*;  package com.mr.util; import java.io.File; import...
  • yy6060
  • yy6060
  • 2011年04月07日 22:33
  • 1107

Java课程设计笔记-用org.apache.tools.zip中的类压缩/解压zip文件

本来想装一发逼用zlib库的……结果没找到怎么用zlib库以流的形式压缩/解压多个文件,跪了……先用Java实现这个功能吧 去年助攻学姐的大作业的时候写过这个,压缩/解压是抄来的,代码也没了…… 实现...
  • entalent
  • entalent
  • 2015年12月02日 19:01
  • 571

使用org.apache.tools.zip实现zip压缩和解压

import java.io.*;  import org.apache.tools.zip.*;  import java.util.Enumeration;  /**  *功能:zip压缩...
  • SuperBoo
  • SuperBoo
  • 2014年03月26日 16:03
  • 375
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用java实现zip压缩解压缩(org.apache.tools.zip)
举报原因:
原因补充:

(最多只允许输入30个字)