java zip文件的解压缩(支持中文文件名)

   用的apache的ant包,下载导入即可。由于过程比较简单,直接上代码。

   代码可直接复制使用。

   如果想在android上使用,记得要在AndroidManifest.xml里添加权限:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

 

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipException;

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

/**
 * 可以处理中文文件名
 */
public class jieya {

    public static void main(String[] args) {

        /**
         * 解压文件
         */
        File zipFile = new File("e:/压缩sdhjk.rar");

        String path = "e:/zipfile/";

        try {

            unZipFiles(zipFile, path);

        } catch (Exception e) {

            System.out.println("解压异常");

        }
    }

    /**
     * 解压到指定目录
     * 
     * @param zipPath
     * @param descDir
     * @author isea533
     */
    public static void unZipFiles(String zipPath, String descDir) {

        try {

            unZipFiles(new File(zipPath), descDir);

        } catch (Exception e) {

            e.printStackTrace();
        }
    }

    /**
     * 解压文件到指定目录
     * 
     * @param zipFile
     * @param descDir
     * @author isea533
     */
    @SuppressWarnings("rawtypes")
    public static void unZipFiles(File zipFile, String descDir) {

        File pathFile = new File(descDir);

        if (!pathFile.exists()) {

            pathFile.mkdirs();

        }

        try {

            ZipFile zip = new ZipFile(zipFile);

            for (Enumeration entries = zip.getEntries(); entries
                    .hasMoreElements();) {

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

                String zipEntryName = entry.getName();

                InputStream in = zip.getInputStream(entry);

                String outPath = (descDir + zipEntryName)
                        .replaceAll("\\*", "/");

                // 判断路径是否存在,不存在则创建文件路径
                File file = new File(outPath.substring(0,
                        outPath.lastIndexOf('/')));

                if (!file.exists()) {

                    file.mkdirs();

                }

                // 判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
                if (new File(outPath).isDirectory()) {

                    continue;

                }
                // 输出文件路径信息
                System.out.println(outPath);

                OutputStream out = new FileOutputStream(outPath);

                byte[] buf1 = new byte[1024];

                int len;

                while ((len = in.read(buf1)) > 0) {

                    out.write(buf1, 0, len);

                }

                in.close();

                out.close();

            }
        } catch (ZipException e) {

            e.printStackTrace();

            System.out.println("压缩文件打开异常");

        } catch (FileNotFoundException e) {

            e.printStackTrace();
            System.out.println("文件没有找到");

        } catch (IOException e) {

            e.printStackTrace();

            System.out.println("io异常");
        }

        System.out.println("******************解压完毕********************");
    }

}

 

posted on 2013-10-07 11:18  取悦  阅读(1255)  评论(0编辑  收藏  举报

导航