关闭

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

标签: javaimportfilebytestringnull
6277人阅读 评论(2) 收藏 举报
分类:

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

}
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:98533次
    • 积分:1286
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:49篇
    • 译文:0篇
    • 评论:19条
    文章分类