该文章参考了iteye某位大虾的博客,我自己进行了修改。请大家参考
package cn;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import de.innosystec.unrar.Archive;
import de.innosystec.unrar.exception.RarException;
import de.innosystec.unrar.rarfile.FileHeader;
/**
* 对rar或者zip进行解压缩
*
* @authorxfworld
*
*/
public class Decompress {
//private static String fileName = "";
/**
* 对rar文件解压
*
* @param rarFileName
* @param extPlace
* @return
*/
public static boolean unrarFiles(String rarFileName, String extPlace) {
boolean flag = false;
Archive archive = null;
File out = null;
File file = null;
File dir = null;
FileOutputStream os = null;
FileHeader fh = null;
String path, dirPath = "";
try {
file = new File(rarFileName);
archive = new Archive(file);
} catch (RarException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
if (file != null) {
file = null;
}
}
if (archive != null) {
try {
fh = archive.nextFileHeader();
while (fh != null) {
//fileName = fh.getFileNameString().trim();
String fileName = "";
//for unicode
if(fh.isUnicode()){
fileName = fh.getFileNameW().trim();
}else{
fileName = fh.getFileNameString().trim();
}
//for linux
if(fileName.indexOf("\\\\")>0){
//path = (extPlace + fileName).replaceAll("\\\\", File.separator);
fileName = fileName.replaceAll("\\\\", File.separator);
}
if(extPlace.indexOf("\\\\")>0)
{
extPlace = extPlace.replaceAll("\\\\", File.separator);
}
File filepath=new File(extPlace);
if(filepath.isDirectory())
{
}
else
{
extPlace=extPlace+File.separator;
}
path= extPlace+ fileName;
int end = path.lastIndexOf("/");
if (end != -1) {
dirPath = path.substring(0, end);
}
try {
dir = new File(dirPath);
if (!dir.exists()) {
dir.mkdirs();
}
} catch (RuntimeException e1) {
e1.printStackTrace();
} finally {
if (dir != null) {
dir = null;
}
}
if (fh.isDirectory()) {
fh = archive.nextFileHeader();
continue;
}
out = new File(extPlace + fileName);
try {
if(!out.exists())
{
out.getParentFile().mkdirs();
out.createNewFile();
}
os = new FileOutputStream(out);
archive.extractFile(fh, os);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (RarException e) {
e.printStackTrace();
}catch(Exception ee)
{
ee.printStackTrace();
}
finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
out = null;
}
}
fh = archive.nextFileHeader();
}
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
fh = null;
if (archive != null) {
try {
archive.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
flag = true;
}
return flag;
}
}
/**
*
*/
package cn;
import java.io.File;
/**
* @author xfworld
*
*/
public class Main {
/**
*
*/
public Main() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//Decompress.unrarFiles("F:"+File.separator+"jquery1.7.2.rar", "d:"+File.separator);
Decompress.unrarFiles("f:\\jquery1.7.2.rar", "d:\\1");
}
}