-
Android实现文件压缩与解压工具类
这篇文章主要为大家详细介绍了如何使用Android实现一个文件压缩与解压工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
一个简单压缩解压工具类
public class ZipUtils {
public static void compressFolder(Activity activity, String sourcePath, String zipFile) throws IOException {
File folder = new File(sourcePath);
File zipPath = new File(zipFile);
if (zipPath.exists()) {
zipPath.delete();
}
// 创建输出流并指定要生成的ZIP文件路径
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
addFilesToZip(folder, folder.getName(), zos);
System.out.println("文件夹已成功压缩为 " + zipFile);
Toast.makeText(activity, "压缩已完成", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
throw new RuntimeException("无法将文件夹压缩到ZIP文件中", e);
}
}
private static void addFilesToZip(File file, String parentName, ZipOutputStream zos) throws IOException {
if (!file.exists()) return;
for (File child : file.listFiles()) {
if (child.isDirectory()) {
addFilesToZip(child, parentName + "/" + child.getName(), zos);
} else {
byte[] buffer = new byte[1024];
// 获取当前文件相对于源文件夹的路径名称
String entryName = parentName + "/" + child.getName();
// 添加新条目到ZIP文件中
zos.putNextEntry(new ZipEntry(entryName));
// 读取文件内容并写入ZIP文件
try (InputStream is = new FileInputStream(child)) {
int length;
while ((length = is.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
} finally {
zos.closeEntry();
}
}
}
}
public static void Unzip(String zipFile, String targetDir) {
Log.e("lz>>","zipFile:"+zipFile+" targetDir:"+targetDir);
int BUFFER = 4096; //这里缓冲区我们使用4KB,
String strEntry; //保存每个zip的条目名称
try {
BufferedOutputStream dest = null; //缓冲输出流
FileInputStream fis = new FileInputStream(zipFile);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry; //每个zip条目的实例
while ((entry = zis.getNextEntry()) != null) {
try {
Log.i("Unzip: ","="+ entry);
int count;
byte data[] = new byte[BUFFER];
strEntry = entry.getName();
File entryFile = new File(targetDir + strEntry);
File entryDir = new File(entryFile.getParent());
if (!entryDir.exists()) {
entryDir.mkdirs();
}
FileOutputStream fos = new FileOutputStream(entryFile);
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
zis.close();
Log.i("Unzip: ","="+ "结束");
} catch (Exception cwj) {
cwj.printStackTrace();
}
}
压缩使用:
File appDir = getFilesDir();
String filePath = appDir+“”";//需要压缩的文件路径
String zipWalletfile = zipfile.getAbsolutePath();
try {
//zipWalletfile + "/wallet.zip"压缩后的文件名
ZipUtils.compressFolder(ZipActivity.this, filePath , zipWalletfile + "/wallet.zip");
} catch (Exception e) {
throw new RuntimeException(e);
}
解压使用:
File zipfile = Environment.getExternalStorageDirectory();
String zipWalletfile = zipfile.getAbsolutePath();//待解压文件
String unzipPath=getFilesDir().getPath();解压文件路径
ZipUtils.Unzip(zipWalletfile + "/wallet.zip",unzipPath+"/");
到此这篇关于Android实现文件压缩与解压工具类的文章就介绍到这了,更多相关Android文件压缩解压内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持
原文链接:https://blog.csdn.net/generallizhong/article/details/138126628
栏目列表
最新更新
vbscript基础篇 - vbs数组Array的定义与使用方
vbscript基础篇 - vbs变量定义与使用方法
vbs能调用的系统对象小结
vbscript网页模拟登录效果代码
VBScript 根据IE窗口的标题输出ESC
杀死指定进程名称的小VBS
通过vbs修改以点结尾的文件的属性为隐藏
查询电脑开关机时间的vbs代码
VBA中的Timer函数用法
ComboBox 控件的用法教程
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比