java解压zip文件

/**
 * 解压文件
 * @param zipFile 目标文件
 * @param descDir 指定解压目录
 * @param urlList 存放解压后的文件目录(可选)
 * @return
 */
public boolean unZip(File zipFile, String descDir,  List urlList) {
    boolean flag = false;
    File pathFile = new File(descDir);
    if(!pathFile.exists()){
        pathFile.mkdirs();
    }
    ZipFile zip = null;
    try {
        //指定编码,否则压缩包里面不能有中文目录
        zip = new ZipFile(zipFile, Charset.forName("gbk"));
        for(Enumeration entries = zip.entries(); entries.hasMoreElements();){
            ZipEntry entry = (ZipEntry)entries.nextElement();
            String zipEntryName = entry.getName();
            InputStream in = zip.getInputStream(entry);
            String outPath = (descDir+zipEntryName).replace("/", File.separator);
            //判断路径是否存在,不存在则创建文件路径
            File file = new File(outPath.substring(0, outPath.lastIndexOf(File.separator)));
            if(!file.exists()){
                file.mkdirs();
            }
            //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
            if(new File(outPath).isDirectory()){
                continue;
            }
            //保存文件路径信息
            urlList.add(outPath);

            OutputStream out = new FileOutputStream(outPath);
            byte[] buf1 = new byte[2048];
            int len;
            while((len=in.read(buf1))>0){
                out.write(buf1,0,len);
            }
            in.close();
            out.close();
        }
        flag = true;
        //必须关闭,否则无法删除该zip文件
        zip.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return flag;
}

//测试

//zip文件存放位置(加上文件名)D:\pgp\temp\ecg\1511337845943\111.zip
String zipPath = "D:\pgp\temp\ecg\1511337845943\111.zip";
File zipFile = new File(zipPath );
//zip文件解压后的路径 D:\pgp\temp\ecg\1511337845943\
String descDir = "D:\pgp\temp\ecg\1511337845943\";

//保存文件路径信息(可选)
List urlList = new ArrayList<>();
unZip(File zipFile, String descDir,  List urlList)

你可能感兴趣的:(Java学习笔记)