java 解压缩 工具类_详解java解压缩zip和rar的工具类使用教程

package

decompress;

import

java.io.File;

import

java.io.FileOutputStream;

import

org.apache.tools.ant.Project;

import

org.apache.tools.ant.taskdefs.Expand;

import

de.innosystec.unrar.Archive;

import

de.innosystec.unrar.rarfile.FileHeader;

public class DeCompressUtil

{

/**

*

解压zip格式压缩包

*

对应的是ant.jar

*/

private static void

unzip(String sourceZip,String destDir) throws Exception{

try{

Project

p = new Project();

Expand

e = new Expand();

e.setProject(p);

e.setSrc(new File(sourceZip));

e.setOverwrite(false);

e.setDest(new File(destDir));

/*

ant下的zip工具默认压缩编码为UTF-8编码,

而winRAR软件压缩是用的windows默认的GBK或者GB2312编码

所以解压缩时要制定编码格式

*/

e.setEncoding("gbk");

e.execute();

}catch(Exception

e){

throw e;

}

}

/**

*

解压rar格式压缩包。

*

对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar

*/

private static void

unrar(String sourceRar,String destDir) throws Exception{

Archive

a = null;

FileOutputStream

fos = null;

try{

a

= new Archive(new File(sourceRar));

FileHeader

fh = a.nextFileHeader();

while(fh!=null){

if(!fh.isDirectory()){

//1

根据不同的操作系统拿到相应的 destDirName 和 destFileName

String

compressFileName = fh.getFileNameString().trim();

String

destFileName = "";

String

destDirName = "";

//非windows系统

if(File.separator.equals("/")){

destFileName

= destDir + compressFileName.replaceAll("\\\\", "/");

destDirName

= destFileName.substring(0, destFileName.lastIndexOf("/"));

//windows系统

}else{

destFileName

= destDir + compressFileName.replaceAll("/", "\\\\");

destDirName

= destFileName.substring(0, destFileName.lastIndexOf("\\"));

}

//2创建文件夹

File

dir = new File(destDirName);

if(!dir.exists()||!dir.isDirectory()){

dir.mkdirs();

}

//3解压缩文件

fos

= new FileOutputStream(new File(destFileName));

a.extractFile(fh,

fos);

fos.close();

fos

= null;

}

fh

= a.nextFileHeader();

}

a.close();

a

= null;

}catch(Exception

e){

throw e;

}finally{

if(fos!=null){

try{fos.close();fos=null;}catch(Exception

e){e.printStackTrace();}

}

if(a!=null){

try{a.close();a=null;}catch(Exception

e){e.printStackTrace();}

}

}

}

/**

*

解压缩

*/

public static void

deCompress(String sourceFile,String destDir) throws Exception{

//保证文件夹路径最后是"/"或者"\"

char

lastChar = destDir.charAt(destDir.length()-1);

if(lastChar!='/'&&lastChar!='\\'){

destDir

+= File.separator;

}

//根据类型,进行相应的解压缩

String

type = sourceFile.substring(sourceFile.lastIndexOf(".")+1);

if(type.equals("zip")){

DeCompressUtil.unzip(sourceFile,

destDir);

}else if(type.equals("rar")){

DeCompressUtil.unrar(sourceFile,

destDir);

}else{

throw new Exception("只支持zip和rar格式的压缩包!");

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值