Android实现zip文件压缩及解压缩的方法

Android实现zip文件压缩及解压缩的方法,第1张

概述本文实例讲述了Android实现zip文件压缩解压缩的方法。分享给大家供大家参考。具体如下:

本文实例讲述了AndroID实现zip文件压缩及解压缩的方法。分享给大家供大家参考。具体如下:

DirTraversal.java如下:

package com.once;import java.io.file;import java.util.ArrayList;import java.util.linkedList;/** * 文件夹遍历 * @author once * */public class DirTraversal {  //no recursion  public static linkedList<file> Listlinkedfiles(String strPath) {    linkedList<file> List = new linkedList<file>();    file dir = new file(strPath);    file file[] = dir.Listfiles();    for (int i = 0; i < file.length; i++) {      if (file[i].isDirectory())        List.add(file[i]);      else        System.out.println(file[i].getabsolutePath());    }    file tmp;    while (!List.isEmpty()) {      tmp = (file) List.removeFirst();      if (tmp.isDirectory()) {        file = tmp.Listfiles();        if (file == null)          continue;        for (int i = 0; i < file.length; i++) {          if (file[i].isDirectory())            List.add(file[i]);          else            System.out.println(file[i].getabsolutePath());        }      } else {        System.out.println(tmp.getabsolutePath());      }    }    return List;  }  //recursion  public static ArrayList<file> Listfiles(String strPath) {    return refreshfileList(strPath);  }  public static ArrayList<file> refreshfileList(String strPath) {    ArrayList<file> fileList = new ArrayList<file>();    file dir = new file(strPath);    file[] files = dir.Listfiles();    if (files == null)      return null;    for (int i = 0; i < files.length; i++) {      if (files[i].isDirectory()) {        refreshfileList(files[i].getabsolutePath());      } else {        if(files[i].getname().tolowerCase().endsWith("zip"))          fileList.add(files[i]);      }    }    return fileList;  }}

ZipUtils.java如下:

package com.once;import java.io.*;import java.util.ArrayList;import java.util.Collection;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.Zipfile;import java.util.zip.ZipOutputStream;/** * Java utils 实现的Zip工具 * * @author once */public class ZipUtils {  private static final int BUFF_SIZE = 1024 * 1024; // 1M Byte  /**   * 批量压缩文件(夹)   *   * @param resfileList 要压缩的文件(夹)列表   * @param zipfile 生成的压缩文件   * @throws IOException 当压缩过程出错时抛出   */  public static voID zipfiles(Collection<file> resfileList,file zipfile) throws IOException {    ZipOutputStream zipout = new ZipOutputStream(new bufferedoutputstream(new fileOutputStream(        zipfile),BUFF_SIZE));    for (file resfile : resfileList) {      zipfile(resfile,zipout,"");    }    zipout.close();  }  /**   * 批量压缩文件(夹)   *   * @param resfileList 要压缩的文件(夹)列表   * @param zipfile 生成的压缩文件   * @param comment 压缩文件的注释   * @throws IOException 当压缩过程出错时抛出   */  public static voID zipfiles(Collection<file> resfileList,file zipfile,String comment)      throws IOException {    ZipOutputStream zipout = new ZipOutputStream(new bufferedoutputstream(new fileOutputStream(        zipfile),"");    }    zipout.setComment(comment);    zipout.close();  }  /**   * 解压缩一个文件   *   * @param zipfile 压缩文件   * @param folderPath 解压缩的目标目录   * @throws IOException 当解压缩过程出错时抛出   */  public static voID upZipfile(file zipfile,String folderPath) throws ZipException,IOException {    file desDir = new file(folderPath);    if (!desDir.exists()) {      desDir.mkdirs();    }    Zipfile zf = new Zipfile(zipfile);    for (Enumeration<?> entrIEs = zf.entrIEs(); entrIEs.hasMoreElements();) {      ZipEntry entry = ((ZipEntry)entrIEs.nextElement());      inputStream in = zf.getinputStream(entry);      String str = folderPath + file.separator + entry.getname();      str = new String(str.getBytes("8859_1"),"GB2312");      file desfile = new file(str);      if (!desfile.exists()) {        file fileParentDir = desfile.getParentfile();        if (!fileParentDir.exists()) {          fileParentDir.mkdirs();        }        desfile.createNewfile();      }      OutputStream out = new fileOutputStream(desfile);      byte buffer[] = new byte[BUFF_SIZE];      int realLength;      while ((realLength = in.read(buffer)) > 0) {        out.write(buffer,realLength);      }      in.close();      out.close();    }  }  /**   * 解压文件名包含传入文字的文件   *   * @param zipfile 压缩文件   * @param folderPath 目标文件夹   * @param nameContains 传入的文件匹配名   * @throws ZipException 压缩格式有误时抛出   * @throws IOException IO错误时抛出   */  public static ArrayList<file> upZipSelectedfile(file zipfile,String folderPath,String nameContains) throws ZipException,IOException {    ArrayList<file> fileList = new ArrayList<file>();     file desDir = new file(folderPath);    if (!desDir.exists()) {      desDir.mkdir();    }    Zipfile zf = new Zipfile(zipfile);    for (Enumeration<?> entrIEs = zf.entrIEs(); entrIEs.hasMoreElements();) {      ZipEntry entry = ((ZipEntry)entrIEs.nextElement());      if (entry.getname().contains(nameContains)) {        inputStream in = zf.getinputStream(entry);        String str = folderPath + file.separator + entry.getname();        str = new String(str.getBytes("8859_1"),"GB2312");        // str.getBytes("GB2312"),"8859_1" 输出        // str.getBytes("8859_1"),"GB2312" 输入        file desfile = new file(str);        if (!desfile.exists()) {          file fileParentDir = desfile.getParentfile();          if (!fileParentDir.exists()) {            fileParentDir.mkdirs();          }          desfile.createNewfile();        }        OutputStream out = new fileOutputStream(desfile);        byte buffer[] = new byte[BUFF_SIZE];        int realLength;        while ((realLength = in.read(buffer)) > 0) {          out.write(buffer,realLength);        }        in.close();        out.close();        fileList.add(desfile);      }    }    return fileList;  }  /**   * 获得压缩文件内文件列表   *   * @param zipfile 压缩文件   * @return 压缩文件内文件名称   * @throws ZipException 压缩文件格式有误时抛出   * @throws IOException 当解压缩过程出错时抛出   */  public static ArrayList<String> getEntrIEsnames(file zipfile) throws ZipException,IOException {    ArrayList<String> entrynames = new ArrayList<String>();    Enumeration<?> entrIEs = getEntrIEsEnumeration(zipfile);    while (entrIEs.hasMoreElements()) {      ZipEntry entry = ((ZipEntry)entrIEs.nextElement());      entrynames.add(new String(getEntryname(entry).getBytes("GB2312"),"8859_1"));    }    return entrynames;  }  /**   * 获得压缩文件内压缩文件对象以取得其属性   *   * @param zipfile 压缩文件   * @return 返回一个压缩文件列表   * @throws ZipException 压缩文件格式有误时抛出   * @throws IOException IO *** 作有误时抛出   */  public static Enumeration<?> getEntrIEsEnumeration(file zipfile) throws ZipException,IOException {    Zipfile zf = new Zipfile(zipfile);    return zf.entrIEs();  }  /**   * 取得压缩文件对象的注释   *   * @param entry 压缩文件对象   * @return 压缩文件对象的注释   * @throws UnsupportedEnCodingException   */  public static String getEntryComment(ZipEntry entry) throws UnsupportedEnCodingException {    return new String(entry.getComment().getBytes("GB2312"),"8859_1");  }  /**   * 取得压缩文件对象的名称   *   * @param entry 压缩文件对象   * @return 压缩文件对象的名称   * @throws UnsupportedEnCodingException   */  public static String getEntryname(ZipEntry entry) throws UnsupportedEnCodingException {    return new String(entry.getname().getBytes("GB2312"),"8859_1");  }  /**   * 压缩文件   *   * @param resfile 需要压缩的文件(夹)   * @param zipout 压缩的目的文件   * @param rootpath 压缩的文件路径   * @throws fileNotFoundException 找不到文件时抛出   * @throws IOException 当压缩过程出错时抛出   */  private static voID zipfile(file resfile,ZipOutputStream zipout,String rootpath)      throws fileNotFoundException,IOException {    rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : file.separator)        + resfile.getname();    rootpath = new String(rootpath.getBytes("8859_1"),"GB2312");    if (resfile.isDirectory()) {      file[] fileList = resfile.Listfiles();      for (file file : fileList) {        zipfile(file,rootpath);      }    } else {      byte buffer[] = new byte[BUFF_SIZE];      BufferedinputStream in = new BufferedinputStream(new fileinputStream(resfile),BUFF_SIZE);      zipout.putNextEntry(new ZipEntry(rootpath));      int realLength;      while ((realLength = in.read(buffer)) != -1) {        zipout.write(buffer,realLength);      }      in.close();      zipout.flush();      zipout.closeEntry();    }  }}

希望本文所述对大家的AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android实现zip文件压缩及解压缩的方法全部内容,希望文章能够帮你解决Android实现zip文件压缩及解压缩的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1142306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存