Android(安卓)Zip压缩解压缩
16lz
2022-06-02
研究了一下Android上Zip的用法,写了个类把常用的几种方法写了出来
公共方法列表 | |
static List<File> |
取得压缩包中的文件列表(文件夹,文件自选) zipFileString : 压缩包文件 bContainFolder : 是否包括文件夹 bContainFile : 是否包括文件 |
static InputStream |
返回压缩包中的文件InputStream zipFileString : 压缩包文件 fileString : 要解压的文件名 |
staticvoid |
解压一个压缩文档 到指定位置 zipFileString : 压缩包文件 outPathString : 要输出的路径 |
staticvoid |
压缩文件,文件夹 srcFileString : 要压缩的文件,文件夹的路径 zipFileString : 输出压缩包的路径 |
Java代码
- /**
- *AndroidZip压缩解压缩
- *@authorRen.xia
- *@version1.0
- *@updated26-七月-201013:04:27
- */
- publicclassXZip{
- publicXZip(){
- }
- /**
- *取得压缩包中的文件列表(文件夹,文件自选)
- *@paramzipFileString压缩包名字
- *@parambContainFolder是否包括文件夹
- *@parambContainFile是否包括文件
- *@return
- *@throwsException
- */
- publicstaticjava.util.List<java.io.File>GetFileList(StringzipFileString,booleanbContainFolder,booleanbContainFile)throwsException{
- android.util.Log.v("XZip","GetFileList(String)");
- java.util.List<java.io.File>fileList=newjava.util.ArrayList<java.io.File>();
- java.util.zip.ZipInputStreaminZip=newjava.util.zip.ZipInputStream(newjava.io.FileInputStream(zipFileString));
- java.util.zip.ZipEntryzipEntry;
- StringszName="";
- while((zipEntry=inZip.getNextEntry())!=null){
- szName=zipEntry.getName();
- if(zipEntry.isDirectory()){
- //getthefoldernameofthewidget
- szName=szName.substring(0,szName.length()-1);
- java.io.Filefolder=newjava.io.File(szName);
- if(bContainFolder){
- fileList.add(folder);
- }
- }else{
- java.io.Filefile=newjava.io.File(szName);
- if(bContainFile){
- fileList.add(file);
- }
- }
- }//endofwhile
- inZip.close();
- returnfileList;
- }
- /**
- *返回压缩包中的文件InputStream
- *@paramzipFileString压缩文件的名字
- *@paramfileString解压文件的名字
- *@returnInputStream
- *@throwsException
- */
- publicstaticjava.io.InputStreamUpZip(StringzipFileString,StringfileString)throwsException{
- android.util.Log.v("XZip","UpZip(String,String)");
- java.util.zip.ZipFilezipFile=newjava.util.zip.ZipFile(zipFileString);
- java.util.zip.ZipEntryzipEntry=zipFile.getEntry(fileString);
- returnzipFile.getInputStream(zipEntry);
- }
- /**
- *解压一个压缩文档到指定位置
- *@paramzipFileString压缩包的名字
- *@paramoutPathString指定的路径
- *@throwsException
- */
- publicstaticvoidUnZipFolder(StringzipFileString,StringoutPathString)throwsException{
- android.util.Log.v("XZip","UnZipFolder(String,String)");
- java.util.zip.ZipInputStreaminZip=newjava.util.zip.ZipInputStream(newjava.io.FileInputStream(zipFileString));
- java.util.zip.ZipEntryzipEntry;
- StringszName="";
- while((zipEntry=inZip.getNextEntry())!=null){
- szName=zipEntry.getName();
- if(zipEntry.isDirectory()){
- //getthefoldernameofthewidget
- szName=szName.substring(0,szName.length()-1);
- java.io.Filefolder=newjava.io.File(outPathString+java.io.File.separator+szName);
- folder.mkdirs();
- }else{
- java.io.Filefile=newjava.io.File(outPathString+java.io.File.separator+szName);
- file.createNewFile();
- //gettheoutputstreamofthefile
- java.io.FileOutputStreamout=newjava.io.FileOutputStream(file);
- intlen;
- byte[]buffer=newbyte[1024];
- //read(len)bytesintobuffer
- while((len=inZip.read(buffer))!=-1){
- //write(len)bytefrombufferattheposition0
- out.write(buffer,0,len);
- out.flush();
- }
- out.close();
- }
- }//endofwhile
- inZip.close();
- }//endoffunc
- /**
- *压缩文件,文件夹
- *@paramsrcFileString要压缩的文件/文件夹名字
- *@paramzipFileString指定压缩的目的和名字
- *@throwsException
- */
- publicstaticvoidZipFolder(StringsrcFileString,StringzipFileString)throwsException{
- android.util.Log.v("XZip","ZipFolder(String,String)");
- //创建Zip包
- java.util.zip.ZipOutputStreamoutZip=newjava.util.zip.ZipOutputStream(newjava.io.FileOutputStream(zipFileString));
- //打开要输出的文件
- java.io.Filefile=newjava.io.File(srcFileString);
- //压缩
- ZipFiles(file.getParent()+java.io.File.separator,file.getName(),outZip);
- //完成,关闭
- outZip.finish();
- outZip.close();
- }//endoffunc
- /**
- *压缩文件
- *@paramfolderString
- *@paramfileString
- *@paramzipOutputSteam
- *@throwsException
- */
- privatestaticvoidZipFiles(StringfolderString,StringfileString,java.util.zip.ZipOutputStreamzipOutputSteam)throwsException{
- android.util.Log.v("XZip","ZipFiles(String,String,ZipOutputStream)");
- if(zipOutputSteam==null)
- return;
- java.io.Filefile=newjava.io.File(folderString+fileString);
- //判断是不是文件
- if(file.isFile()){
- java.util.zip.ZipEntryzipEntry=newjava.util.zip.ZipEntry(fileString);
- java.io.FileInputStreaminputStream=newjava.io.FileInputStream(file);
- zipOutputSteam.putNextEntry(zipEntry);
- intlen;
- byte[]buffer=newbyte[4096];
- while((len=inputStream.read(buffer))!=-1)
- {
- zipOutputSteam.write(buffer,0,len);
- }
- zipOutputSteam.closeEntry();
- }
- else{
- //文件夹的方式,获取文件夹下的子文件
- StringfileList[]=file.list();
- //如果没有子文件,则添加进去即可
- if(fileList.length<=0){
- java.util.zip.ZipEntryzipEntry=newjava.util.zip.ZipEntry(fileString+java.io.File.separator);
- zipOutputSteam.putNextEntry(zipEntry);
- zipOutputSteam.closeEntry();
- }
- //如果有子文件,遍历子文件
- for(inti=0;i<fileList.length;i++){
- ZipFiles(folderString,fileString+java.io.File.separator+fileList[i],zipOutputSteam);
- }//endoffor
- }//endofif
- }//endoffunc
- publicvoidfinalize()throwsThrowable{
- }
- }
更多相关文章
- Android多媒体框架初步分析
- Android(安卓)Log日志保存到本地并读取
- android背景选择器selector用法汇总
- android安装包apk文件反编译代码
- Android中Gzip使用
- 我的Android进阶之旅------>Ubuntu下不能识别Android设备的解决
- android的文件系统结构及其引导过程的初步理解
- android系统中运行jar文件
- NPM 和webpack 的基础使用