java 解压zip、rar文件

来源:互联网 发布:淘宝购物卡哪里买 编辑:程序博客网 时间:2024/05/17 23:51
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.charset.Charset;import java.util.Enumeration;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipInputStream;import com.github.junrar.Archive;import com.github.junrar.rarfile.FileHeader;/** *  * @ClassName: FileCompress  * @Description: TODO(这里用一句话描述这个类的作用)  * @author 周玉波 * @date 2017年4月11日 上午9:30:11  * */@SuppressWarnings("rawtypes")public final class FileCompress{/**     * zip解压缩     *      * @param zipfile     *            File 需要解压缩的文件     * @param descDir     *            String 解压后的目标目录     */    public static String unZipFiles(java.io.File zipfile, String descDir) {    InputStream in =null;    OutputStream out =null;    ZipFile zf=null;    File file=null;    String zipEntryName="";        try {        descDir=descDir.replaceAll("\\/", "\\\\").replaceAll("\\.zip", "");        //jdk1.8没有参数Charset,适用于1.7            zf = new ZipFile(zipfile,Charset.forName("GBK"));            for (Enumeration entries = zf.entries(); entries                    .hasMoreElements();) {                ZipEntry entry = ((ZipEntry) entries.nextElement());                zipEntryName = entry.getName();                                boolean ismkdir = false;                  if(zipEntryName.lastIndexOf("/") != -1){ //检查此文件是否带有文件夹                     ismkdir = true;                  }                  zipEntryName = descDir+"\\" + zipEntryName;                   if(entry.isDirectory()){ //如果是文件夹先创建                     file = new File(zipEntryName);                     file.mkdirs();                      continue;                  }                  file = new File(zipEntryName);                  if(!file.exists()){ //如果是目录先创建                     if(ismkdir){                     new File(zipEntryName.substring(0, zipEntryName.lastIndexOf("/"))).mkdirs(); //目录先创建                     }                  }                  //file.createNewFile(); //创建文件                                in = zf.getInputStream(entry);                File dstDiretory = new File(descDir);                if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹                    dstDiretory.mkdirs();                }                out = new FileOutputStream(zipEntryName);                byte[] buf1 = new byte[1024];                int len;                while ((len = in.read(buf1)) > 0) {                    out.write(buf1, 0, len);                }                System.out.println("解压缩完成.");            }            return zipEntryName.replaceAll("/", "\\\\");        } catch (IOException e) {            e.printStackTrace();        }finally{        try {        if(out!=null){out.close();out=null;        }        if(in!=null){in.close();in=null;        }        if(zf!=null){        zf.close();        zf=null;        }        } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        System.gc();        }return null;    }    /**     * 根据原始rar路径,解压到指定文件夹下.          * @param srcRarPath 原始rar路径     * @param dstDirectoryPath 解压到的文件夹          */    public static String unRarFile(String srcRarPath, String dstDirectoryPath) {    dstDirectoryPath=dstDirectoryPath.replaceAll("\\/", "\\\\").replaceAll("\\.rar", "");    //dstDirectoryPath=dstDirectoryPath.substring(0,dstDirectoryPath.lastIndexOf("\\"));        if (!srcRarPath.toLowerCase().endsWith(".rar")) {            System.out.println("非rar文件!");            return "";        }        File dstDiretory = new File(dstDirectoryPath);        if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹            dstDiretory.mkdirs();        }        Archive a = null;        FileOutputStream os=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();                            }                            os = new FileOutputStream(out);                            a.extractFile(fh, os);                        } catch (Exception ex) {                            ex.printStackTrace();                        }finally{                        if(os!=null){                        os.close();                        os=null;                        }                        }                    }                    fh = a.nextFileHeader();                }            }            return dstDirectoryPath;        } catch (Exception e) {            e.printStackTrace();        }finally{        if(a!=null){        try {a.close();a=null;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}        }        }        return "";    }}
RAR的解压需要导入包junrar-0.7.jar
1 0
原创粉丝点击