需要引入java-unrar-0.3.jar 和 commons-logging-1.1.1.jar
package com.example.testapp;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.util.Log;
import de.innosystec.unrar.Archive;
import de.innosystec.unrar.exception.RarException;
import de.innosystec.unrar.rarfile.FileHeader;
public class RARUtil {
private static final String TAG = "RARUtil";
public static void unrar(String srcPath,String unrarPath) throws RarException, IOException, Exception{
File srcFile = new File(srcPath);
if(null == unrarPath || "".equals(unrarPath)){
unrarPath = srcFile.getParentFile().getPath();
}
// 保证文件夹路径最后是"/"或者"\"
char lastChar = unrarPath.charAt(unrarPath.length() - 1);
if (lastChar != '/' && lastChar != '\\') {
unrarPath += File.separator;
}
Log.d(TAG,"unrar file to :"+unrarPath);
unrar(srcFile, unrarPath);
}
private static void unrar(File srcFile,String unrarPath) throws RarException, IOException, Exception{
FileOutputStream fileOut = null;
Archive rarfile = null;
try{
rarfile = new Archive(srcFile);
FileHeader fh = rarfile.nextFileHeader();
while(fh!=null){
String entrypath = "";
if(fh.isUnicode()){//解決中文乱码
entrypath = fh.getFileNameW().trim();
}else{
entrypath = fh.getFileNameString().trim();
}
entrypath = entrypath.replaceAll("\\\\", "/");
File file = new File(unrarPath + entrypath);
Log.d(TAG,"unrar entry file :"+file.getPath());
if(fh.isDirectory()){
file.mkdirs();
}else{
File parent = file.getParentFile();
if(parent!=null && !parent.exists()){
parent.mkdirs();
}
fileOut = new FileOutputStream(file);
rarfile.extractFile(fh, fileOut);
fileOut.close();
}
fh = rarfile.nextFileHeader();
}
rarfile.close();
} catch (Exception e) {
throw e;
} finally {
if (fileOut != null) {
try {
fileOut.close();
fileOut = null;
} catch (Exception e) {
e.printStackTrace();
}
}
if (rarfile != null) {
try {
rarfile.close();
rarfile = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}