java解压rar有的用cmd命令行调用winrar.exe,这其实是一个很不好的方法,主要理由如下:
1:会出现解压的页面
2:如果压缩包有错误,会弹出解压警告框。
其实有一个unrar.jar可以实现解压,但是网上很多的用法都是不对的,我这里参考了一些资料写了一个。
/**
* 根据原始rar路径,解压到指定文件夹下.
* @param srcRarPath 原始rar路径
* @param dstDirectoryPath 解压到的文件夹
*/
public static void unRarFile(String srcRarPath, String dstDirectoryPath) {
if (!srcRarPath.toLowerCase().endsWith(".rar")) {
System.out.println("非rar文件!");
return;
}
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) {
if (fh.isDirectory()) { //文件夹
File fol = new File(dstDirectoryPath + File.separator + fh.getFileNameString());
fol.mkdirs();
} else { //文件
File out = new File(dstDirectoryPath + File.separator + fh.getFileNameString().trim());
System.out.println(out.getAbsolutePath());
try {//之所以这么写try,是因为万一这里面有了异常,不影响继续解压.
if (!out.exists()) {
if (!out.getParentFile().exists()) {//相对路径可能多级,可能需要创建父目录.
out.getParentFile().mkdirs();
}
out.createNewFile();