java 实现解压压缩包

maven 依赖:


   org.apache.ant
   ant
   1.7.0

 

package unzip;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;


public class unzip {
    public static void main(String[] args) {
      /* 文件地址 */
        File srcFile = new File("C:/***/*****.zip");
      /* 解压存放地址 */
      unZip(srcFile, "D:\\zip");
    }

    public static void unZip(File srcFile, String destDirPath) throws RuntimeException {

       /** 开始解压时间 */
        long start = System.currentTimeMillis();

      /* 判断源文件是否存在 */

        if (!srcFile.exists()) {

            throw new RuntimeException(srcFile.getPath() + "所指文件不存在");

        }

      /* 开始解压 */

        ZipFile zipFile = null;

        try {

            zipFile = new ZipFile(srcFile);

            Enumeration entries = zipFile.getEntries();

            while (entries.hasMoreElements()) {

                ZipEntry entry = (ZipEntry) entries.nextElement();

                System.out.println("解压" + entry.getName());

                // 如果是文件夹,就创建个文件夹

                if (entry.isDirectory()) {

                    String dirPath = destDirPath + "/" + entry.getName();

                    File dir = new File(dirPath);

                    dir.mkdirs();

                } else {

               /* 如果是文件,就先创建一个文件,然后用io流把内容copy过去 */

                    File targetFile = new File(destDirPath + "/" + entry.getName());

               /* 保证这个文件的父文件夹必须要存在 */

                    if (!targetFile.getParentFile().exists()) {

                        targetFile.getParentFile().mkdirs();

                    }

                    targetFile.createNewFile();

                    // 将压缩文件内容写入到这个文件中

                    InputStream is = zipFile.getInputStream(entry);

                    FileOutputStream fos = new FileOutputStream(targetFile);

                    int len;

                    byte[] buf = new byte[1024];

                    while ((len = is.read(buf)) != -1) {

                        fos.write(buf, 0, len);

                    }

               /* 关流顺序,先打开的后关闭 */

                    fos.close();

                    is.close();

                }

            }

            /** 结束解压时间 */
            long end = System.currentTimeMillis();

            System.out.println("解压完成,耗时:" + (end - start) + " ms");

        } catch (Exception e) {

            throw new RuntimeException("unzip error from ZipUtils", e);

        } finally {

            if (zipFile != null) {

                try {

                    zipFile.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

你可能感兴趣的:(java 实现解压压缩包)