JAVA 解_ZIP

来源:互联网 发布:期货交易软件分析决策 编辑:程序博客网 时间:2024/05/05 01:00


/*
 提供zip文件的解压缩接口:
 AdapterZipFile:
   输入:zipFileName(zip文件的绝对路径),outputDirectory(zip文件解压缩后的存放路径)
   输出:
   说明:初始化函数
 unZipFile:
   输入:无
   输出:
   说明:解压缩zip文件,解压缩后存放到outputDirectory路径下
 GetZipFileList:
   输入:无
   输出:list
   说明:解压缩后的文件列表绝对路径存放在ArrayList动态数组中
 */


package com.mop.pushmail.adapter.htmlziprar;

import java.io.*;
import java.util.*;
import org.apache.tools.zip.*;

public class AdapterZipFile {
    String zipFileName = null;//zip文件的绝对路径
    String outputDirectory = null;//zip文件解压缩后的存放路径
    ArrayList list = new ArrayList();//文件解压缩后的文件列表绝对路径

//    public AdapterZipFile(String zipFileName) {
//        if(zipFileName == null){
//            return;
//        }
//        this.zipFileName = zipFileName.replace("/","//");
//        unZipFile();
//    }

    //初始化
    public AdapterZipFile(String zipFileName, String outputDirectory){
        if(zipFileName == null){
            return;
        }
        this.zipFileName = zipFileName;
        if(outputDirectory != null){
             this.outputDirectory = outputDirectory;
        }else{
            this.outputDirectory = zipFileName.substring(0,
                    zipFileName.replace('//', '/').lastIndexOf("/"));
        }
       // unZipFile();
    }

   //创建目录
    private void createDirectory(String directory, String subDirectory) {
        String dir[];
        File fl = new File(directory);
        try {
            if (subDirectory == "" && fl.exists() != true)
                fl.mkdirs();
            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())
                        subFile.mkdir();
                    directory += File.separator + dir[i];
                }
            }
        }catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    //解压缩文件
    //如果outputDierctory为null,解压到zipFileName文件的当前目录下
    public void unZipFile() {
        File file = new File(zipFileName);
        if (!file.exists()) {
            return;
        }
        createDirectory(outputDirectory, "");

        try {
            ZipFile zipFile = new ZipFile(zipFileName);
            Enumeration e = zipFile.getEntries();
            ZipEntry zipEntry = null;
            while (e.hasMoreElements()) {
                zipEntry = (ZipEntry) e.nextElement();
                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('//', '/');
                    //文件在多层目录下 这时需要创建目录如:d1/d2/1.txt
                    if (fileName.indexOf("/") != -1) {
                        createDirectory(outputDirectory, fileName.substring(0,
                                fileName.lastIndexOf("/")));
                        fileName = fileName.substring(
                                fileName.lastIndexOf("/") + 1, fileName
                                .length());
                    }

                    list.add(outputDirectory + File.separator
                                      + zipEntry.getName());
                    File f = new File(outputDirectory + File.separator
                                      + 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();
                }
            }
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

   //返回zip文件解压撒后文件列表的绝对路径
    public ArrayList GetZipFileList(){
        return list;
    }
}

 

原创粉丝点击