android解压rar文件
程序员文章站
2024-03-24 11:32:58
...
package com.jxd.jxdtest.commonutil;
import android.util.Log;
import java.io.File;
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;
public class RarUtil {
/**
* 暂时不支持带密码的rar文件
*/
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();
}
}
}
}
/**
* 需要commons-compress-1.18.jar
*/
// /**
// * 解压缩7z文件
// * @param file 压缩包文件
// * @param targetPath 目标文件夹
// * @param delete 解压后是否删除原压缩包文件
// */
// private static void decompress7Z(File file, String targetPath, boolean delete){
// SevenZFile sevenZFile = null;
// OutputStream outputStream = null;
// try {
// sevenZFile = new SevenZFile(file);
// // 创建输出目录
// createDirectory(targetPath, null);
// SevenZArchiveEntry entry;
//
// while((entry = sevenZFile.getNextEntry()) != null){
// if(entry.isDirectory()){
// createDirectory(targetPath, entry.getName()); // 创建子目录
// }else{
// outputStream = new FileOutputStream(new File(targetPath + File.separator + entry.getName()));
// int len = 0;
// byte[] b = new byte[2048];
// while((len = sevenZFile.read(b)) != -1){
// outputStream.write(b, 0, len);
// }
// outputStream.flush();
// }
// }
// } catch (IOException e) {
// e.printStackTrace();
// }finally {
// try {
// if(sevenZFile != null){
// sevenZFile.close();
// }
// if(outputStream != null){
// outputStream.close();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
}
下一篇: Java学习笔记75. 线程的睡眠方法