android解压zip文件进度条,Android实现文件解压带进度条功能
解压的工具类
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, 0, 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解压zip文件进度条,Android实现文件解压带进度条功能相关推荐
- 解压zip、rar、gz格式文件
rar解压版本:需要使用0.7,其他版本尝试了,不行,而且rar压缩的时候,也需要指定rar4,高版本不支持 <!--解压rar压缩--><dependency><gro ...
- linux解压zip覆盖目录,linux下压缩与解压(zip、unzip、tar)详解
最近经常在linux上进行打包压缩解压,从网上收集整理并结合自己的常用的,跟大家分享一下下,废话不多说,进入正题. 1.zip 压缩 如果是直接压缩几个文件,那就可以直接使用命令 zip newfil ...
- 虚拟机下解压zip类型压缩包 附各类型文件打包及压缩方式
首先需要安装命令 zip unzip 执行yum -y install zip unzip安装完毕后 解压zip类型的压缩包 :命令格式: unzip 需要解压压缩包名 如下图所示 好了,就这
- 基于RxJava2.0+Retrofit2.0超大文件分块(分片)上传(带进度)
当上传文件过大时,直接上传会增加服务器负载,负载过高会导致机器无法处理其他请求及操作,甚至导致宕机,这时分块上传是最佳选择.本次简单介绍两种分块上传文件方案(暂不考虑文件安全相关问题,如签名): 方案 ...
- linux不解压zip包直接取出其中的文件
需求:生产环境中打包zip包之后发现其中一个文件名错误,但是重新打包比较耗费时间,网上查找资料可以不解压对zip包中文件进行操作. 1.从zip包中取出文件 unzip -j /data/test.z ...
- Android 解压zip文件你知道多少?
对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...
- Android开发之Zip下载解压
本篇博客为需求而发烧,若有雷同需求code拿走不谢. 需求如下:点击Item,从服务器下载zip包到本地文件夹并解压,解压后的图片文件全部查询出来,用于界面预览 没有强制每次都下载zip包保持最新,如 ...
- Android进度条ProgressBar使用详解
先介绍一下ProgressBar几种比较常用的属性 布局中设置: android:max="100" --最大显示进度 android:progress="50" ...
- Linux中解压zip包的命令是什么?
Linux系统里的zip是一种创建压缩存档文件的常用方式,同时也是一种传统的文件归档文件格式,那么Linux中解压zip包的命令是什么?Linux解压zip包的命令是:unzip,该命令主要用于查看和 ...
- Python自动化,破解zip密码,提取密码,自动解压
使用john,破解简单的6位纯数字密码 + 身份证后6位密码 安装: git clone https://github.com/magnumripper/JohnTheRipper.gitcd Joh ...
最新文章
- 微服务慌了!看看人家这分布式事务搞得,就是不一样
- ESX 3.5 与License Server不定时失去连接解决方法一例
- 【Mybatis】sqlSessionTemplate.getConnection() 遇到 java.sql.SQLException: Connection is closed
- 《假如编程是魔法之零基础看得懂的Python入门教程 》——(一)既然你选择了这系列教程那么我就要让你听得懂
- stateless_Spring Stateless State Security第3部分:JWT +社会认证
- Canvas Clock
- iOS 日志管理异常捕获组件LFLogManager
- 数据科学 IPython 笔记本 7.4 Pandas 对象介绍
- 字符串的模式匹配方法
- 爱情九十一课,留下好的你
- docunment对象
- 利用python进行数据加载和存储
- 手把手教你如何下载编译Spring源码
- Pandas数据库数据抽取
- 消防应急疏散指示系统在某生物制药工厂项目的应用
- 《关山月》赏析-(李白明月姑娘之五)
- python读取大智慧数据_大智慧365权息数据格式及读取过程步骤记录
- 物联网云平台实战(一)-什么是物联网?
- CRMEB知识付费系统安装支付宝支付报错invalid [default store dir]: /tmp/
- 学完数据分析怎样就业,数据分析发展前景怎么样