zip&&rar

package com.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
 
import org.apache.tools.tar.TarEntry;
import org.apache.tools.tar.TarOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
 
import de.innosystec.unrar.Archive;
 
/**
  * @author Every E-mail/MSN:mwgjkf@hotmail.com
  *   QQ:30130942
  * @version 创建时间:Feb 26, 2009 6:01:11 PM
  * 类说明:压缩、解压文件公用类
  *
  */
public class Test {
     private static final int BUFFEREDSIZE =  1024 ;
     public Test() {
         // TODO Auto-generated constructor stub
     }
 
     /**
      * 解压zip格式的压缩文件到当前文件夹
      * @param zipFileName
      * @throws Exception
      */
     @SuppressWarnings ( "unchecked" )
     public synchronized void unzipFile(String zipFileName)  throws Exception {
         try {
             File f =  new File(zipFileName);
             ZipFile zipFile =  new ZipFile(zipFileName);
             if ((!f.exists()) && (f.length() <=  0 )) {
                 throw new Exception( "要解压的文件不存在!" );
             }
             String strPath, gbkPath, strtemp;
             File tempFile =  new File(f.getParent());
             strPath = tempFile.getAbsolutePath();
             java.util.Enumeration e = zipFile.getEntries();
             while (e.hasMoreElements()){
                 org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();
                 gbkPath=zipEnt.getName();
                 if (zipEnt.isDirectory()){
                     strtemp = strPath +  "/" + gbkPath;
                     File dir =  new File(strtemp);
                     dir.mkdirs();
                     continue ;
                 else {
                     //读写文件
                     InputStream is = zipFile.getInputStream(zipEnt);
                     BufferedInputStream bis =  new BufferedInputStream(is);
                     gbkPath=zipEnt.getName();
                     strtemp = strPath +  "/" + gbkPath;
                 
                     //建目录
                     String strsubdir = gbkPath;
                     for ( int i =  0 ; i < strsubdir.length(); i++) {
                         if (strsubdir.substring(i, i +  1 ).equalsIgnoreCase( "/" )) {
                             String temp = strPath +  "/" + strsubdir.substring( 0 , i);
                             File subdir =  new File(temp);
                             if (!subdir.exists())
                             subdir.mkdir();
                         }
                     }
                     FileOutputStream fos =  new FileOutputStream(strtemp);
                     BufferedOutputStream bos =  new BufferedOutputStream(fos);
                     int c;
                     while ((c = bis.read()) != - 1 ) {
                         bos.write(( byte ) c);
                     }
                     bos.close();
                     fos.close();
                 }
             }
         catch (Exception e) {
             e.printStackTrace();
             throw e;
         }
     }
     
     /**
      * 解压zip格式的压缩文件到指定位置
      * @param zipFileName 压缩文件
      * @param extPlace 解压目录
      * @throws Exception
      */
     @SuppressWarnings ( "unchecked" )
     public synchronized void unzip(String zipFileName, String extPlace)  throws Exception {
         try {
             ( new File(extPlace)).mkdirs();
             File f =  new File(zipFileName);
             ZipFile zipFile =  new ZipFile(zipFileName);
             if ((!f.exists()) && (f.length() <=  0 )) {
                 throw new Exception( "要解压的文件不存在!" );
             }
             String strPath, gbkPath, strtemp;
             File tempFile =  new File(extPlace);
             strPath = tempFile.getAbsolutePath();
             java.util.Enumeration e = zipFile.getEntries();
             while (e.hasMoreElements()){
                 org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();
                 gbkPath=zipEnt.getName();
                 if (zipEnt.isDirectory()){
                     strtemp = strPath + File.separator + gbkPath;
                     File dir =  new File(strtemp);
                     dir.mkdirs();
                     continue ;
                 else {
                     //读写文件
                     InputStream is = zipFile.getInputStream(zipEnt);
                     BufferedInputStream bis =  new BufferedInputStream(is);
                     gbkPath=zipEnt.getName();
                     strtemp = strPath + File.separator + gbkPath;
                 
                     //建目录
                     String strsubdir = gbkPath;
                     for ( int i =  0 ; i < strsubdir.length(); i++) {
                         if (strsubdir.substring(i, i +  1 ).equalsIgnoreCase( "/" )) {
                             String temp = strPath + File.separator + strsubdir.substring( 0 , i);
                             File subdir =  new File(temp);
                             if (!subdir.exists())
                             subdir.mkdir();
                         }
                     }
                     FileOutputStream fos =  new FileOutputStream(strtemp);
                     BufferedOutputStream bos =  new BufferedOutputStream(fos);
                     int c;
                     while ((c = bis.read()) != - 1 ) {
                         bos.write(( byte ) c);
                     }
                     bos.close();
                     fos.close();
                 }
             }
         catch (Exception e) {
             e.printStackTrace();
             throw e;
         }
     }
     
     /**
      * 解压zip格式的压缩文件到指定位置
      * @param zipFileName 压缩文件
      * @param extPlace 解压目录
      * @throws Exception
      */
     @SuppressWarnings ( "unchecked" )
     public synchronized void unzip(String zipFileName, String extPlace, boolean whether)  throws Exception {
         try {
             ( new File(extPlace)).mkdirs();
             File f =  new File(zipFileName);
             ZipFile zipFile =  new ZipFile(zipFileName);
             if ((!f.exists()) && (f.length() <=  0 )) {
                 throw new Exception( "要解压的文件不存在!" );
             }
             String strPath, gbkPath, strtemp;
             File tempFile =  new File(extPlace);
             strPath = tempFile.getAbsolutePath();
             java.util.Enumeration e = zipFile.getEntries();
             while (e.hasMoreElements()){
                 org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();
                 gbkPath=zipEnt.getName();
                 if (zipEnt.isDirectory()){
                     strtemp = strPath + File.separator + gbkPath;
                     File dir =  new File(strtemp);
                     dir.mkdirs();
                     continue ;
                 else {
                     //读写文件
                     InputStream is = zipFile.getInputStream(zipEnt);
                     BufferedInputStream bis =  new BufferedInputStream(is);
                     gbkPath=zipEnt.getName();
                     strtemp = strPath + File.separator + gbkPath;
                 
                     //建目录
                     String strsubdir = gbkPath;
                     for ( int i =  0 ; i < strsubdir.length(); i++) {
                         if (strsubdir.substring(i, i +  1 ).equalsIgnoreCase( "/" )) {
                             String temp = strPath + File.separator + strsubdir.substring( 0 , i);
                             File subdir =  new File(temp);
                             if (!subdir.exists())
                             subdir.mkdir();
                         }
                     }
                     FileOutputStream fos =  new FileOutputStream(strtemp);
                     BufferedOutputStream bos =  new BufferedOutputStream(fos);
                     int c;
                     while ((c = bis.read()) != - 1 ) {
                         bos.write(( byte ) c);
                     }
                     bos.close();
                     fos.close();
                 }
             }
         catch (Exception e) {
             e.printStackTrace();
             throw e;
         }
     }
     /**
      * 压缩zip格式的压缩文件
      * @param inputFilename 压缩的文件或文件夹及详细路径
      * @param zipFilename 输出文件名称及详细路径
      * @throws IOException
      */
     public synchronized void zip(String inputFilename, String zipFilename)  throws IOException {
         zip( new File(inputFilename), zipFilename);
     }
     
     /**
      * 压缩zip格式的压缩文件
      * @param inputFile 需压缩文件
      * @param zipFilename 输出文件及详细路径
      * @throws IOException
      */
     public synchronized void zip(File inputFile, String zipFilename)  throws IOException {
         ZipOutputStream out =  new ZipOutputStream( new FileOutputStream(zipFilename));
         try {
             zip(inputFile, out,  "" );
         catch (IOException e) {
             throw e;
         finally {
             out.close();
         }
     }
     
     /**
      * 压缩zip格式的压缩文件
      * @param inputFile 需压缩文件
      * @param out 输出压缩文件
      * @param base 结束标识
      * @throws IOException
      */
     @SuppressWarnings ( "unused" )
     private synchronized void zip(File inputFile, ZipOutputStream out, String base)  throws IOException {
         if (inputFile.isDirectory()) {
             File[] inputFiles = inputFile.listFiles();
             out.putNextEntry( new ZipEntry(base +  "/" ));
             base = base.length() ==  0 "" : base +  "/" ;
             for ( int i =  0 ; i < inputFiles.length; i++) {
                 zip(inputFiles[i], out, base + inputFiles[i].getName());
             }
         else {
             if (base.length() >  0 ) {
                 out.putNextEntry( new ZipEntry(base));
             else {
                 out.putNextEntry( new ZipEntry(inputFile.getName()));
             }
             FileInputStream in =  new FileInputStream(inputFile);
             try {
                 int c;
                 byte [] by =  new byte [BUFFEREDSIZE];
                 while ((c = in.read(by)) != - 1 ) {
                     out.write(by,  0 , c);
                 }
             catch (IOException e) {
                 throw e;
             finally {
                 in.close();
             }
         }
     }
 
     
     /**
      * 解压tar格式的压缩文件到指定目录下
      * @param tarFileName 压缩文件
      * @param extPlace 解压目录
      * @throws Exception
      */
     public synchronized void untar(String tarFileName, String extPlace)  throws Exception{
         
     }
     
     /**
      * 压缩tar格式的压缩文件
      * @param inputFilename 压缩文件
      * @param tarFilename 输出路径
      * @throws IOException
      */
     public synchronized void tar(String inputFilename, String tarFilename)  throws IOException{
         tar( new File(inputFilename), tarFilename);
     }
     
     /**
      * 压缩tar格式的压缩文件
      * @param inputFile 压缩文件
      * @param tarFilename 输出路径
      * @throws IOException
      */
     public synchronized void tar(File inputFile, String tarFilename)  throws IOException{
         TarOutputStream out =  new TarOutputStream( new FileOutputStream(tarFilename));
         try {
             tar(inputFile, out,  "" );
         catch (IOException e) {
             throw e;
         finally {
             out.close();
         }
     }
     
     /**
      * 压缩tar格式的压缩文件
      * @param inputFile 压缩文件
      * @param out 输出文件
      * @param base 结束标识
      * @throws IOException
      */
     @SuppressWarnings ( "unused" )
     private synchronized void tar(File inputFile, TarOutputStream out, String base)  throws IOException {
         if (inputFile.isDirectory()) {
             File[] inputFiles = inputFile.listFiles();
             out.putNextEntry( new TarEntry(base +  "/" ));
             base = base.length() ==  0 "" : base +  "/" ;
             for ( int i =  0 ; i < inputFiles.length; i++) {
                 tar(inputFiles[i], out, base + inputFiles[i].getName());
             }
         else {
             if (base.length() >  0 ) {
                 out.putNextEntry( new TarEntry(base));
             else {
                 out.putNextEntry( new TarEntry(inputFile.getName()));
             }
             FileInputStream in =  new FileInputStream(inputFile);
             try {
                 int c;
                 byte [] by =  new byte [BUFFEREDSIZE];
                 while ((c = in.read(by)) != - 1 ) {
                     out.write(by,  0 , c);
                 }
             catch (IOException e) {
                 throw e;
             finally {
                 in.close();
             }
         }
     }
     
      /**
      * 解压rar格式的压缩文件到指定目录下
      * @param rarFileName 压缩文件
      * @param extPlace 解压目录
      * @throws Exception
      */
     public synchronized void unrar(String rarFileName, String extPlace)  throws Exception{
         try {
             ( new File(extPlace)).mkdirs();
             // 构建测解压缩类
             Archive archive =  new Archive();
             archive.setEnabledLog( false );  //不输出日志
             // 设置rar文件
             archive.setFile(rarFileName);
             archive.setExtractPath(extPlace);
             archive.extractAllFile();
         catch (Exception e) {
             // TODO: handle exception
         }
     }
     
     /**
      * 执行实例
      * @param args
      */
     public static void main(String[] args)  throws Exception {
         Test decompression= new Test();
         //decompression.unzipFile("d:/Inetpub.zip");
         //decompression.unzip("d:/Inetpub.zip","d://Inetpub");
         //decompression.zip("c:/Inetpub", "c:/Inetpub.zip");
         decompression.unrar( "d:/FSCapture62.rar" "d:/FSCapture62" );
         
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值