package rartofile;
import java.io.File;
import java.io.FileOutputStream;
import com.github.junrar.Archive;
import com.github.junrar.rarfile.FileHeader;
public class RarToFile {
public static void main(String[] args) {
String srcRarPath="D:\\test\\0001rar\\001.rar";
String dstDirectoryPath="D:\\test\\0001rar\\002";
unRarFile(srcRarPath, dstDirectoryPath);
}
/**
* Java 解压rar压缩包
*
* @param srcRarPath
*
* @param dstDirectoryPath
*
*/
public static boolean unRarFile(String srcRarPath,String dstDirectoryPath) {
if (!srcRarPath.toLowerCase().endsWith(".rar")) {
System.out.println("不是rar压缩包");
return false;
}
File dstDiretory = new File(dstDirectoryPath);
if (!dstDiretory.exists()) {
dstDiretory.mkdirs();
}
Archive a = null;
try {
a = new Archive(new File(srcRarPath));
if (a != null) {
// a.getMainHeader().print();
FileHeader fh = a.nextFileHeader();
while (fh != null) {
String fileName = fh.getFileNameW().isEmpty() ? fh.getFileNameString() : fh.getFileNameW();
if (fh.isDirectory()) {
File fol = new File(dstDirectoryPath + File.separator + fileName);
fol.mkdirs();
} else {
File out = new File(dstDirectoryPath + File.separator + fileName.trim());
try {
if (!out.exists()) {
if (!out.getParentFile().exists()) {
out.getParentFile().mkdirs();
}
out.createNewFile();
}
FileOutputStream os = new FileOutputStream(out);
a.extractFile(fh, os);
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
fh = a.nextFileHeader();
}
a.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}