package com.ssm.util;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.innosystec.unrar.Archive;
import de.innosystec.unrar.rarfile.FileHeader;
/*
* 需要引入java.unrar-0.3.jar和commons-logging.jar
*/
public class unrar{
private static List<PageData> FileNamelist=new ArrayList<PageData>();
public static List<PageData> getFileNamelist() {
return FileNamelist;
}
public static void setFileNamelist(List<PageData> fileNamelist) {
FileNamelist = fileNamelist;
}
public static void main(String[] args) throws Exception{
unrar unra=new unrar();
File f1=new File("C:\\poi\\abc.rar");
File f2=new File("C:\\poi\\abc");
unra.unrar(f1,f2);
}
/**
*
* @param sourceRar rar解压文件的路径
* @param destDir 解压到的文件路径
*/
public static void unrar(File sourceRar,File destDir) throws Exception {
List<PageData> Filelist=new ArrayList<PageData>();
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) {
String compressFileName="";
System.out.println(fh.isUnicode());
// 判断文件路径是否有中文
if(existZH(fh.getFileNameW())){
System.out.println((++count) + ") "+ fh.getFileNameW());
compressFileName =fh.getFileNameW().trim();
PageData pd=new PageData();
pd.put("file", fh.getFileNameW());
Filelist.add(pd);
}else{
System.out.println((++count) + ") "+ fh.getFileNameString());
compressFileName =fh.getFileNameString().trim();
PageData pd=new PageData();
pd.put("file", fh.getFileNameW());
Filelist.add(pd);
}
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) {
//ignore
}
}
if (archive != null) {
try {
archive.close();
archive = null;
} catch (Exception e) {
//ignore
}
}
}
unrar.setFileNamelist(Filelist);
}
// 判断路径是否带中文
public static boolean existZH(String str) {
String regEx = "[\\u4e00-\\u9fa5]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
return true;
}
return false;
}
}
jar :链接:https://pan.baidu.com/s/1RuVbrLFfJwKm1w3ycnOQ6Q 密码:d0a5