Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 400|回复: 0

开发交流:Android Zip压缩解压缩

[复制链接]

该用户从未签到

发表于 2011-10-24 09:54:36 | 显示全部楼层 |阅读模式
研究了一下Android上Zip的用法,写了个类把常用的几种方法写了出来

公共方法列表
static List<File>GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)

取得压缩包中的文件列表(文件夹,文件自选)
zipFileString      : 压缩包文件
bContainFolder : 是否包括文件夹
bContainFile      : 是否包括文件

static InputStreamUpZip(String zipFileString, String fileString)

返回压缩包中的文件InputStream
zipFileString : 压缩包文件
fileString      : 要解压的文件名

static voidUnZipFolder(String zipFileString, String outPathString)

解压一个压缩文档 到指定位置
zipFileString    : 压缩包文件
outPathString : 要输出的路径

static voidZipFolder(String srcFileString, String zipFileString)

压缩文件,文件夹
srcFileString : 要压缩的文件,文件夹的路径
zipFileString : 输出压缩包的路径


java代码 /**

* Android Zip压缩解压缩

* @author Ren.xia

* @version 1.0

* @updated 26-七月-2010 13:04:27

*/

public class XZip {



        public XZip(){



        }

        

        /**

         * 取得压缩包中的 文件列表(文件夹,文件自选)

         * @param zipFileString                压缩包名字

         * @param bContainFolder        是否包括 文件夹

         * @param bContainFile                是否包括 文件

         * @return

         * @throws Exception

         */

        public static java.util.List<java.io.File> GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {

               

                android.util.Log.v("XZip", "GetFileList(String)");

               

                java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();

                java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));

                java.util.zip.ZipEntry zipEntry;

                String szName = "";

               

                while ((zipEntry = inZip.getNextEntry()) != null) {

                        szName = zipEntry.getName();

               

                        if (zipEntry.isDirectory()) {

               

                                // get the folder name of the widget

                                szName = szName.substring(0, szName.length() - 1);

                                java.io.File folder = new java.io.File(szName);

                                if (bContainFolder) {

                                        fileList.add(folder);

                                }

               

                        } else {

                                java.io.File file = new java.io.File(szName);

                                if (bContainFile) {

                                        fileList.add(file);

                                }

                        }

                }//end of while

               

                inZip.close();

               

                return fileList;

        }



        /**

         * 返回压缩包中的文件InputStream

         * @param zipFileString                压缩文件的名字

         * @param fileString        解压文件的名字

         * @return InputStream

         * @throws Exception

         */

        public static java.io.InputStream UpZip(String zipFileString, String fileString)throws Exception {

                android.util.Log.v("XZip", "UpZip(String, String)");

                java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFileString);

                java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);

               

                return zipFile.getInputStream(zipEntry);



        }

        

        

        /**

         * 解压一个压缩文档 到指定位置

         * @param zipFileString        压缩包的名字

         * @param outPathString        指定的路径

         * @throws Exception

         */

        public static void UnZipFolder(String zipFileString, String outPathString)throws Exception {

                android.util.Log.v("XZip", "UnZipFolder(String, String)");

                java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));

                java.util.zip.ZipEntry zipEntry;

                String szName = "";

               

                while ((zipEntry = inZip.getNextEntry()) != null) {

                        szName = zipEntry.getName();

               

                        if (zipEntry.isDirectory()) {

               

                                // get the folder name of the widget

                                szName = szName.substring(0, szName.length() - 1);

                                java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);

                                folder.mkdirs();

               

                        } else {

               

                                java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);

                                file.createNewFile();

                                // get the output stream of the file

                                java.io.FileOutputStream out = new java.io.FileOutputStream(file);

                                int len;

                                byte[] buffer = new byte[1024];

                                // read (len) bytes into buffer

                                while ((len = inZip.read(buffer)) != -1) {

                                        // write (len) byte from buffer at the position 0

                                        out.write(buffer, 0, len);

                                        out.flush();

                                }

                                out.close();

                        }

                }//end of while

               

                inZip.close();

        

        }//end of func

        



        /**

         * 压缩文件,文件夹

         * @param srcFileString        要压缩的文件/文件夹名字

         * @param zipFileString        指定压缩的目的和名字

         * @throws Exception

         */

        public static void ZipFolder(String srcFileString, String zipFileString)throws Exception {

                android.util.Log.v("XZip", "ZipFolder(String, String)");

               

                //创建Zip包

                java.util.zip.ZipOutputStream outZip = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFileString));

               

                //打开要输出的文件

                java.io.File file = new java.io.File(srcFileString);



                //压缩

                ZipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);

               

                //完成,关闭

                outZip.finish();

                outZip.close();

        

        }//end of func

        

        /**

         * 压缩文件

         * @param folderString

         * @param fileString

         * @param zipOutputSteam

         * @throws Exception

         */

        private static void ZipFiles(String folderString, String fileString, java.util.zip.ZipOutputStream zipOutputSteam)throws Exception{

                android.util.Log.v("XZip", "ZipFiles(String, String, ZipOutputStream)");

               

                if(zipOutputSteam == null)

                        return;

               

                java.io.File file = new java.io.File(folderString+fileString);

               

                //判断是不是文件

                if (file.isFile()) {



                        java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(fileString);

                        java.io.FileInputStream inputStream = new java.io.FileInputStream(file);

                        zipOutputSteam.putNextEntry(zipEntry);

                        

                        int len;

                        byte[] buffer = new byte[4096];

                        

                        while((len=inputStream.read(buffer)) != -1)

                        {

                                zipOutputSteam.write(buffer, 0, len);

                        }

                        

                        zipOutputSteam.closeEntry();

                }

                else {

                        

                        //文件夹的方式,获取文件夹下的子文件

                        String fileList[] = file.list();

                        

                        //如果没有子文件, 则添加进去即可

                        if (fileList.length <= 0) {

                                java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(fileString+java.io.File.separator);

                                zipOutputSteam.putNextEntry(zipEntry);

                                zipOutputSteam.closeEntry();                                

                        }

                        

                        //如果有子文件, 遍历子文件

                        for (int i = 0; i < fileList.length; i++) {

                                ZipFiles(folderString, fileString+java.io.File.separator+fileList, zipOutputSteam);

                        }//end of for

        

                }//end of if

               

        }//end of func

        

        public void finalize() throws Throwable {

               

        }



}
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:54:39 | 显示全部楼层

Re:开发交

楼主,这个一般用在哪?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-10-24 09:54:42 | 显示全部楼层

Re:开发交

Good ~~ 先收藏,留着有用~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 02:01 , Processed in 0.305451 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表