Android -- 压缩与解压文件_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android -- 压缩与解压文件

Android -- 压缩与解压文件

 2014/7/6 16:52:41  我爱物联网  程序员俱乐部  我要评论(0)
  • 摘要:我在做一个项目中,工程文件中有一个功能需要很多图片,图片与app一起打包下来的话有30+M,那么我们就考虑另外下载压缩包,我们将图片取出,工程就只有4+M了,哈哈哈哈,呵呵,真恐怖。那么这样就涉及到另外下载压缩包,以及压缩包的解压。java的工具类里面也包含的有对zip的处理。代码实现publicclassUtil{publicstaticfinalStringZIP_FILENAME="/data/data/com.yydcdut
  • 标签:android 文件 压缩

我在做一个项目中,工程文件中有一个功能需要很多图片,图片与app一起打包下来的话有30+M,那么我们就考虑另外下载压缩包,我们将图片取出,工程就只有4+M了,哈哈哈哈,呵呵,真恐怖。那么这样就涉及到另外下载压缩包,以及压缩包的解压。

java的工具类里面也包含的有对zip的处理。

代码实现                                                                                      

public class Util {
    public static final String ZIP_FILENAME = "/data/data/com.yydcdut.unzip/new_ios_7_icons_by_sunkotora-d68qbmo.zip";//需要解压缩文件名  
    public static final String ZIP_DIR = "/data/data/com.yydcdut.unzip/";//需要压缩的文件夹  
    public static final String UN_ZIP_DIR = "/data/data/com.yydcdut.unzip/zzip/";//要解压的文件目录  
    //上面两个变量好像说反了。
    public static final int BUFFER = 1024 ;//缓存大小  

    /** 
     * zip压缩功能. 
     * 压缩baseDir(文件夹目录)下所有文件,包括子目录 
     * @throws Exception 
     */  
    public static void zipFile(String baseDir,String fileName) throws Exception{  
        List fileList=getSubFiles(new File(baseDir));  
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));  
        ZipEntry ze=null;  
        byte[] buf=new byte[BUFFER];  
        int readLen=0;  
        for(int i = 0; i <fileList.size(); i++) {  
            File f=(File)fileList.get(i);  
            ze=new ZipEntry(getAbsFileName(baseDir, f));  
            ze.setSize(f.length());  
            ze.setTime(f.lastModified());     
            zos.putNextEntry(ze);  
            InputStream is=new BufferedInputStream(new FileInputStream(f));  
            while ((readLen=is.read(buf, 0, BUFFER))!=-1) {  
                zos.write(buf, 0, readLen);  
            }  
            is.close();  
        }  
        zos.close();  
    }  

    /** 
     * 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径. 
     * @param baseDir java.lang.String 根目录 
     * @param realFileName java.io.File 实际的文件名 
     * @return 相对文件名 
     */  
    private static String getAbsFileName(String baseDir, File realFileName){  
        File real=realFileName;  
        File base=new File(baseDir);  
        String ret=real.getName();  
        while (true) {  
            real=real.getParentFile();  
            if(real==null)   
                break;  
            if(real.equals(base))   
                break;  
            else  
                ret=real.getName()+"/"+ret;  
        }  
        return ret;  
    }  

    /** 
     * 取得指定目录下的所有文件列表,包括子目录. 
     * @param baseDir File 指定的目录 
     * @return 包含java.io.File的List 
     */  
    private static List getSubFiles(File baseDir){  
        List ret=new ArrayList();  
        File[] tmp=baseDir.listFiles();  
        for (int i = 0; i <tmp.length; i++) {  
            if(tmp[i].isFile())  
                ret.add(tmp[i]);  
            if(tmp[i].isDirectory())  
                ret.addAll(getSubFiles(tmp[i]));  
        }  
        return ret;  
    }  

    /** 
     * 解压缩功能. 
     * 将ZIP_FILENAME文件解压到ZIP_DIR目录下. 
     * @throws Exception 
     */  
    public static void upZipFile() throws Exception{  
        ZipFile zfile=new ZipFile(ZIP_FILENAME);  
        Enumeration zList=zfile.entries();  
        ZipEntry ze=null;  
        byte[] buf=new byte[1024];  
        while(zList.hasMoreElements()){  
            ze=(ZipEntry)zList.nextElement();         
            if(ze.isDirectory()){  
                File f=new File(ZIP_DIR+ze.getName());  
                f.mkdir();  
                continue;  
            }  
            OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName())));  
            InputStream is=new BufferedInputStream(zfile.getInputStream(ze));  
            int readLen=0;  
            while ((readLen=is.read(buf, 0, 1024))!=-1) {  
                os.write(buf, 0, readLen);  
            }  
            is.close();  
            os.close();   
        }  
        zfile.close();  
    }  

    /** 
     * 给定根目录,返回一个相对路径所对应的实际文件名. 
     * @param baseDir 指定根目录 
     * @param absFileName 相对路径名,来自于ZipEntry中的name 
     * @return java.io.File 实际的文件 
     */  
    public static File getRealFileName(String baseDir, String absFileName){  
        String[] dirs=absFileName.split("/");  
        File ret=new File(baseDir);  
        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]);  
            return ret;  
        }  
        return ret;  
    }  
}

代码分析                                                                                    

先说解压,用ZipFile实例化压缩文件,接下来对ZipFile进行处理。列举出ZipFile中的元素,在用IO操作将ZipFile中的元素转化成文件,如果是目录,则创建目录继续操作。

压缩,运用ZipOutputStream将文件转成IO输出流,再BufferedInputStream输入流写入进去。

我是天王盖地虎的分割线                                                                

源代码:http://pan.baidu.com/s/1dD1Qx01

unzip.zip

 

 

 

转载请注明出处:http://www.cnblogs.com/yydcdut

  • 相关文章
发表评论
用户名: 匿名