Java实现对zip和rar文件的解压缩

通过java实现对zip和rar文件的解压缩

package com.svse.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

import de.innosystec.unrar.Archive;
import de.innosystec.unrar.rarfile.FileHeader;
/**
* zip和rar解压缩工具类
* @author lenovo
*
*/
public class ZipAndRarTools {

 /**
 * 解压rar
 * @param sourceRarPath 需要解压的rar文件全路径
 * @param destDirPath 需要解压到的文件目录
 * @throws Exception
 */
  public static void unrar(String sourceRarPath, String destDirPath) throws Exception { 
   File sourceRar=new File(sourceRarPath);
  File destDir=new File(destDirPath);
  Archive archive = null
  FileOutputStream fos = null
  System.out.println("Starting 开始解压..."); 
  try
    archive = new Archive(sourceRar); 
    FileHeader fh = archive.nextFileHeader(); 
    int count = 0; 
    File destFileName = null
    while (fh != null) { 
      System.out.println((++count) + ") " + fh.getFileNameString()); 
      String compressFileName = fh.getFileNameString().trim(); 
      destFileName = new File(destDir.getAbsolutePath() + "/" + compressFileName); 
      if (fh.isDirectory()) { 
        if (!destFileName.exists()) { 
          destFileName.mkdirs(); 
          } 
        fh = archive.nextFileHeader(); 
        continue
        } 
      if (!destFileName.getParentFile().exists()) { 
        destFileName.getParentFile().mkdirs(); 
        }


      fos = new FileOutputStream(destFileName); 
      archive.extractFile(fh, fos); 
      fos.close(); 
      fos = null
      fh = archive.nextFileHeader(); 
      } 

      archive.close(); 
      archive = null
      System.out.println("Finished 解压完成!"); 
     } catch (Exception e) { 
         throw e; 
      } finally
       if (fos != null) { 
         try
          fos.close(); 
          fos = null
        } catch (Exception e) { 
       } 
     } 
     if (archive != null) { 
      try
        archive.close(); 
        archive = null
     } catch (Exception e) { 
     } 
    } 
   } 
 } 


 /** 
 * 解压Zip文件 
 * @param zipFileName 需要解压缩的文件位置
 * @param descFileName 将文件解压到某个路径
 * @throws IOException 
 */ 
  public static void unZip(String zipFileName,String descFileName) throws IOException{  
    System.out.println("文件解压开始...");
    String descFileNames=descFileName;
    if(!descFileNames.endsWith(File.separator)){
      descFileNames=descFileNames+File.separator;
    }
   try {
      ZipFile zipFile=new ZipFile(zipFileName);
      ZipEntry entry=null;
    String entryName=null;
    String descFileDir=null;
    byte[] buf=new byte[4096];
    int readByte=0;
    @SuppressWarnings("rawtypes")
    Enumeration enums=zipFile.getEntries();
    while(enums.hasMoreElements()){
      entry =(ZipEntry) enums.nextElement();
      entryName=entry.getName();
      descFileDir=descFileNames+entryName;
      if(entry.isDirectory()){
         new File(descFileDir).mkdir();
         continue;
      }else{
        new File(descFileDir).getParentFile().mkdir();
          }
       File file=new File(descFileDir);
     OutputStream os=new FileOutputStream(file);
     InputStream is=zipFile.getInputStream(entry);
        while((readByte=is.read(buf))!=-1){
          os.write(buf, 0, readByte);
        }
          os.close();
          is.close();
       }
         zipFile.close();
         System.out.println("文件解压成功!");
    } catch (Exception e) {
       System.out.println("文件解压失败!");
       e.printStackTrace();
    }

   } 

   public static void main(String[] args) throws Exception {
      //ZipAndRarTools.unrar(newFile("D:\\存放资料的压缩包\\员工材料.rar"),newFile("D:\\存放资料的非压缩包\\"));

     ZipAndRarTools.unZip("D:\\rarTest\\jar包和配置文件资源.zip", "D:\\rarTest");
     ZipAndRarTools.unrar("D:\\rarTest\\rar压缩包.rar", "D:\\rarTest");

    }

}

转载于:https://www.cnblogs.com/zhaosq/p/9777216.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值