• java对zip压缩文件解压缩


    关键字: 解压缩zip文件

         偶尔一次,遇到这样一个问题,要求对zip文件进行解压缩,并读取压缩包中.txt和.inf文件的数据,经过jdk Helper 和 Google才将问题得以解决。这里只写了解压过程,在main方法中压缩包存放路径和解压到目标的文件已经硬编码进去了。程序整体结构不是很令人满意,仍然需要重构.......

    package com.da.unzip;

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.Reader;
    import java.nio.ByteBuffer;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;

    public class Unzip {

     public static void main(String[] args) throws Exception {

      Unzip unzip = new Unzip();
      String zippath = "C:\\unzip\\";// /解压到的目标文件路径
      String zipDir = "C:\\data\\";// 要解压的压缩文件的存放路径
      
       File file = new File(zipDir);
       List list = unzip.getSubFiles(file);
       for (Object obj : list) {
       String realname = ((File)obj).getName();
       System.out.println(realname);
       int end = realname.lastIndexOf(".");
       System.out.println("要解压缩的文件名.........."+zipDir+realname);
       System.out.println("解压到的目录" +zippath+realname.substring(0, end));
       unzip.testReadZip(zippath,zipDir+realname);
       }  

     }

     /*
      * 解压缩功能. 将zippath目录文件解压到unzipPath目录下. @throws Exception
      */
     public void ReadZip(String zippath, String unzipPath) throws Exception {

      ZipFile zfile = new ZipFile(unzipPath);// 生成一个zip文件对象

      System.out.println(zfile.getName());// 获取要解压的zip的文件名全路径

      Enumeration zList = zfile.entries();// 返回枚举对象

      ZipEntry ze = null;// 用于表示 ZIP 文件条目

      byte[] buf = new byte[1024];// 声明字节数组
      /**
       * 循环获取zip文件中的每一个文件
       */
      while (zList.hasMoreElements()) {
       // 从ZipFile中得到一个ZipEntry
       ze = (ZipEntry) zList.nextElement();
       if (ze.isDirectory())// 如果为目录条目,则返回 true,执行下列语句
       {
        System.out.println("Dir: " + ze.getName() + " skipped..");
        continue;
       }
       int begin = zfile.getName().lastIndexOf("\\") + 1;
       int end = zfile.getName().lastIndexOf(".");
       String zipRealName = zfile.getName().substring(begin, end);
       System.out.println("解压缩开始Extracting:"+ze.getName()+"\t"+ze.getSize()+"\t"+ze.getCompressedSize());
       // 以ZipEntry为参数得到一个InputStream,并写到OutputStream中,并加上缓冲
       OutputStream os = new BufferedOutputStream(
         new FileOutputStream(getRealFileName(zippath + "\\"
           + zipRealName, ze.getName())));
       InputStream is = new BufferedInputStream(zfile.getInputStream(ze));
       String fileName = getRealFileName(zippath, ze.getName()).getName();
       System.out.println("解压出的文件名称:" + fileName);
       int readLen = 0;
       while ((readLen = is.read(buf, 0, 1024)) != -1) {
        os.write(buf, 0, readLen);
       }
       is.close();
       os.close();
       // System.out.println("解压缩结束Extracted: "+ze.getName());
      }
      zfile.close();
     }

     /**
      * 给定根目录,返回一个相对路径所对应的实际文件名.
      *
      * @param zippath
      *            指定根目录
      * @param absFileName
      *            相对路径名,来自于ZipEntry中的name
      * @return java.io.File 实际的文件
      */
     private File getRealFileName(String zippath, String absFileName) {

      String[] dirs = absFileName.split("/", absFileName.length());

      File ret = new File(zippath);// 创建文件对象

      if (dirs.length > 1) {
       for (int i = 0; i < dirs.length - 1; i++) {
        ret = new File(ret, dirs[i]);

       }
      }

      if (!ret.exists()) {// 检测文件是否存在
       ret.mkdirs();// 创建此抽象路径名指定的目录
      }
      ret = new File(ret, dirs[dirs.length - 1]);// 根据 ret 抽象路径名和 child
                 // 路径名字符串创建一个新 File 实例

      return ret;
     }
     
    }

  • 相关阅读:
    postman 调试接口报“401 身份认证信息未提供”错误
    UserWarning: XXX is writable by group/others and vulnerable to attack when used with get_resource_filename.
    以root权限执行python时候脚本时候报错“ExtractionError: Can't extract file(s) to egg cache”
    django接口调试示例说明
    查看linux系统版本、内存、CPU、存储容量
    一次批量杀死多个进程
    bash:pybot未找到命令
    Swoft-Api项目部署九:前、后置中间件
    Swoft-Api项目部署八:主从数据库配置
    Swoft-Api项目部署七:验证器
  • 原文地址:https://www.cnblogs.com/chen1987lei/p/1867667.html
Copyright © 2020-2023  润新知