Android实现文件解压带进度条功能

Android实现文件解压带进度条功能,第1张

概述解压的工具类packagecom.example.videodemo.zip;publicclassZipProgressUtil{/****解压通用方法

解压的工具类

package com.example.vIDeodemo.zip; public class ZipProgressUtil {   /***    * 解压通用方法    *    * @param zipfileString    *      文件路径    * @param outPathString    *      解压路径    * @param Listener    *      加压监听    */   public static voID UnZipfile(final String zipfileString,final String outPathString,final ZipListener Listener) {     Thread zipThread = new UnZipMainThread(zipfileString,outPathString,Listener);     zipThread.start();   }   public interface ZipListener {     /** 开始解压 */     voID zipStart();     /** 解压成功 */     voID zipSuccess();     /** 解压进度 */     voID zipProgress(int progress);     /** 解压失败 */     voID zipFail();   } } 

解压线程

package com.example.vIDeodemo.zip; import java.io.file; import java.io.fileinputStream; import java.io.fileOutputStream; import java.io.IOException; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.Zipfile; import java.util.zip.ZipinputStream; import com.example.vIDeodemo.zip.ZipProgressUtil.ZipListener; public class UnZipMainThread extends Thread {   String zipfileString;   String outPathString;   ZipListener Listener;   public UnZipMainThread(String zipfileString,String outPathString,ZipListener Listener) {     this.zipfileString = zipfileString;     this.outPathString = outPathString;     this.Listener = Listener;   }   @OverrIDe   public voID run() {     super.run();     try {       Listener.zipStart();       long sumLength = 0;       // 获取解压之后文件的大小,用来计算解压的进度       long ziplength = getZipTrueSize(zipfileString);       System.out.println("====文件的大小==" + ziplength);       fileinputStream inputStream = new fileinputStream(zipfileString);       ZipinputStream inZip = new ZipinputStream(inputStream);       ZipEntry zipEntry;       String szname = "";       while ((zipEntry = inZip.getNextEntry()) != null) {         szname = zipEntry.getname();         if (zipEntry.isDirectory()) {           szname = szname.substring(0,szname.length() - 1);           file folder = new file(outPathString + file.separator + szname);           folder.mkdirs();         } else {           file file = new file(outPathString + file.separator + szname);           file.createNewfile();           fileOutputStream out = new fileOutputStream(file);           int len;           byte[] buffer = new byte[1024];           while ((len = inZip.read(buffer)) != -1) {             sumLength += len;             int progress = (int) ((sumLength * 100) / ziplength);             updateProgress(progress,Listener);             out.write(buffer,len);             out.flush();           }           out.close();         }       }       Listener.zipSuccess();       inZip.close();     } catch (Exception e) {       Listener.zipFail();     }   }   int lastProgress = 0;   private voID updateProgress(int progress,ZipListener Listener2) {     /** 因为会频繁的刷新,这里我只是进度>1%的时候才去显示 */     if (progress > lastProgress) {       lastProgress = progress;       Listener2.zipProgress(progress);     }   }   /**    * 获取压缩包解压后的内存大小    *    * @param filePath    *      文件路径    * @return 返回内存long类型的值    */   public long getZipTrueSize(String filePath) {     long size = 0;     Zipfile f;     try {       f = new Zipfile(filePath);       Enumeration<? extends ZipEntry> en = f.entrIEs();       while (en.hasMoreElements()) {         size += en.nextElement().getSize();       }     } catch (IOException e) {       e.printstacktrace();     }     return size;   } } 

界面调用方法.我使用的是静态的方法,方便,可以改成非静态的.看个人需求,//注意了,因为解压是放在线程中执行的,所以界面刷新的话,需要使用handler来刷新界面调用还是比较方便的

注意 :调用的方法传入的路径:

        1:是压缩文件的全路径   /storage/reeman/1234.zip

         2:解压文件的路径(非全路径)   /storage/reeman/zip

package com.example.vIDeodemo; import com.example.vIDeodemo.zip.ZipProgressUtil; import com.example.vIDeodemo.zip.ZipProgressUtil.ZipListener; import androID.app.Activity; import androID.os.Bundle; import androID.Widget.Progressbar; public class MainActivity extends Activity {   private Progressbar progressbar1;   @OverrIDe   protected voID onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentVIEw(R.layout.activity_main);     progressbar1 = (Progressbar) findVIEwByID(R.ID.progressbar1);     ZipProgressUtil.UnZipfile("解压文件的路径","解压之后的路径",new ZipListener() {       public voID zipSuccess() {       }       public voID zipStart() {       }       public voID zipProgress(int progress) {       }       public voID zipFail() {       }     });   } } 

总结

以上所述是小编给大家介绍的AndroID实现文件解压进度条功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

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

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

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

原文地址: http://outofmemory.cn/web/1144884.html

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

发表评论

登录后才能评论

评论列表(0条)

保存