本文实例讲述了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文件压缩及解压缩的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)