java,php,asp.net,linux,javascript,mysql,mssql,oracle,编程

JAVA 解压ZIP

转载请注明:http://www.pmjava.com/Article/ShowInfo.asp?ID=56619
*
提供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;
    }
}

posted on 2009-06-10 21:46 rrong_m 阅读(257) 评论(0)  编辑  收藏

<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

随笔档案

文章分类

文章档案

java编程

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜