Java实现对文件做压缩和解压缩(一般用于文件批量导入导出)

来源:互联网 发布:为什么开不了淘宝店 编辑:程序博客网 时间:2024/06/15 04:57

/**
 * com.mysoftlife
 *
 *   ver     date             author
 * ──────────────────────────────────
 *           2013 -8- 6 jmj
 *
 * Copyright (c) 2013, gomai
*/
package com.mysoftlife;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**
 * @author   jmj
 * @version 
 * @Date     2013 2013 -8- 6 下午01:57:56
 */
public class Zip {
       public Zip(){}
      
       public List<File> fileList =new ArrayList<File>();
      
       public List<File> getFileList() {
             return fileList ;
      }
       public void setFileList(List<File> fileList) {
             this.fileList = fileList;
      }
     /**
       * 压缩目录下的文件
       *
       * @param zipFileName
       * @param inputFile
       * @throws Exception
       *          void
       * @throws
       * @2013-8 -6 下午02:47:19
       */
       public void zip(String zipFileName,String inputFile) throws Exception{
            zip(zipFileName, new File(inputFile));
      }
       /**
       * 压缩文件
       *
       * @param zipFileName
       * @param inputFile
       * @throws Exception
       *          void
       * @throws
       * @2013-8 -6 下午02:47:40
       */
       public void zip(String zipFileName, File inputFile) throws Exception {
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
            zip(out, inputFile, "");
            System. out.println("压缩成功!" );
            out.close();
      }
       public void zip(ZipOutputStream out, File f, String base) throws Exception {
            System. out.println("正在压缩  " + f.getName());
             if (f.isDirectory()) {
                  File[] fl = f.listFiles();
                  out.putNextEntry( new ZipEntry(base + "/" ));
                  base = base.length() == 0 ? "" : base + "/" ;
                   for (int i = 0; i < fl.length; i++) {
                        zip(out, fl[i], base + fl[i].getName());
                  }
            } else {
                        out.putNextEntry( new ZipEntry(base));
                        FileInputStream in = new FileInputStream(f);
                         int b;
                         while ((b = in.read()) != -1)
                              out.write(b);
                              in.close();
                    }
      }
       /**
       * 解压缩
       *
       * @param zipFileName
       * @param outputDirectory
       * @throws Exception
       *          void
       * @throws
       * @2013-8 -6 下午02:47:59
       */
       public void unzip(String zipFileName, String outputDirectory) throws
      Exception {
            ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));
            ZipEntry z;
             while ( (z = in.getNextEntry()) != null) {
                  System. out.println("正在解压 " + z.getName());
                   if (z.isDirectory()) {
                              String name = z.getName();
                              name = name.substring(0, name.length() - 1);
                              File f = new File(outputDirectory + File.separator + name);
                              f.mkdir();
                              System. out.println("创建目录 " + outputDirectory + File.separator + name);
                        } else {
                              File f = new File(outputDirectory + File.separator + z.getName());
                              f.createNewFile();
                              FileOutputStream out = new FileOutputStream(f);
                               //获取解压后的单个文件
                               if(f!=null ){
                                     fileList.add(f);
                              }
                               int b;
                               while ( (b = in.read()) != -1)
                                    out.write(b);
                              out.close();
                        }
                  }
                        in.close();
            }
      
       public static void main(String[] args) {
            Zip z= new Zip();
             try {
//                z.zip("D://projects.zip", "D://projects");//压缩文件
                  z.unzip( "D://wenjian//projects.zip" , "D://wenjian" );//解压缩文件
            } catch (Exception e) {
                   // TODO Auto-generated catch block
                  e.printStackTrace();
            }
      }

}
0 0
原创粉丝点击