zoukankan      html  css  js  c++  java
  • 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("******************解压完毕********************");
        }
    
    }
  • 相关阅读:
    java并发编程:线程安全管理类--原子操作类--AtomicReferenceArray<E>
    java并发编程:线程安全管理类--原子操作类--AtomicReference<V>
    java并发编程:线程安全管理类--原子操作类--AtomicMarkableReference<V>
    java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdater<T>
    java并发编程:线程安全管理类--原子操作类--AtomicLongArray
    RabbitMQ安装
    git push error: failed to push some refs to怎么解决
    GitLab的安装和启动、访问
    go mod模式下如何使用本地项目中的包
    推荐,慕课网好课,仿阿里系优酷网-企业级Go改造PHP项目踩坑避坑指北
  • 原文地址:https://www.cnblogs.com/wangyuehome/p/3355141.html
Copyright © 2011-2022 走看看