android 解压缩zip包

Android文件压缩的完整指南 在上述代码中,我们创建了一个名为FileCompressionUtil的工具类,其中的compressFile方法用于压缩文件。我们使用了zip4j库提供的ZipFile类来创建一个压缩文件对象,然后调用addFile方法添加要压缩的文件。如果压缩文件加密了,需要先设置密码。在上述示例中,我们假设存在一个名为source.txt的文件,我们首先将它压缩成compressed.zip,然后解压缩到extracted目录下。这里我们使用了一个名为zip4j的第三方库,它提供了压缩和解压缩文件的功能。 阅读详情

项目里面需要解压缩zip包;或者把项目assets里面的zip包拷贝到手机SD卡里面进行解压。
在这里我是使用的ant.jar这个库:ant.jar

废话不多说,直接附上整个工具类及使用方法:

public class UnZip{

    /**
     * 从项目assets文件夹拷贝到手机sd卡
     * @param context
     */
    public static void CopyAssets(Context context, String zipName) {
        AssetManager assetManager = context.getAssets();

        InputStream in = null;
        OutputStream out = null;
        try {
            in = assetManager.open(zipName);
            out = new FileOutputStream(
                    android.os.Environment.getExternalStorageDirectory() + "/"
                            + zipName);
            CopyFile(in, out);
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
        } catch (Exception e) {
            Log.e("Test", e.getMessage());
        }
    }

    private static void CopyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buf = new byte[1024];
        int n;
        while ((n = in.read(buf)) != -1) {
            out.write(buf, 0, n);
        }
    }

    /**
     * 解压指定zip文件
     * 
     * @param unZipfile
     *            压缩文件的路径
     * @param destFile
     *               解压到的目录 
     */
    public static void unZip(Context context, String unZipfile, String destFile)
            throws IOException, FileNotFoundException, ZipException {

        BufferedInputStream bi;
        ZipFile zipFile = new ZipFile(new File(unZipfile), "GBK");

        @SuppressWarnings("rawtypes")
        Enumeration e = zipFile.getEntries();
        while (e.hasMoreElements()) {
            ZipEntry ze2 = (ZipEntry) e.nextElement();
            String entryName = ze2.getName();
            String path = destFile + "/" + entryName;
            if (ze2.isDirectory()) {
                System.out.println("正在创建解压目录 - " + entryName);
                File decompressDirFile = new File(path);
                if (!decompressDirFile.exists()) {
                    decompressDirFile.mkdirs();
                }
            } else {
                System.out.println("正在创建解压文件 - " + entryName);
                String fileDir = path.substring(0, path.lastIndexOf("/"));
                File fileDirFile = new File(fileDir);
                if (!fileDirFile.exists()) {
                    fileDirFile.mkdirs();
                }
                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream(destFile + "/" + entryName));
                bi = new BufferedInputStream(zipFile.getInputStream(ze2));
                byte[] readContent = new byte[1024];
                int readCount = bi.read(readContent);
                while (readCount != -1) {
                    bos.write(readContent, 0, readCount);
                    readCount = bi.read(readContent);
                }
                bos.close();
            }
        }
        zipFile.close();
    }

    /**
     * 压缩文件
     * 
     * @param srcFile
     *      需要 压缩的目录或者文件
     * @param destFile
     *             压缩文件的路径
     */
    public static void doZip(String srcFile, String destFile) {// zipDirectoryPath:需要压缩的文件夹名
        File zipFile = new File(srcFile);
        try {
            // 生成ZipOutputStream,会把压缩的内容全都通过这个输出流输出,最后写到压缩文件中去
            ZipOutputStream zipOut = new ZipOutputStream(
                    new BufferedOutputStream(new FileOutputStream(destFile)));
            // 设置压缩的注释
            zipOut.setComment("comment");
            // 设置压缩的编码,如果要压缩的路径中有中文,就用下面的编码
            zipOut.setEncoding("GBK");
            // 启用压缩
            zipOut.setMethod(ZipOutputStream.DEFLATED);

            // 压缩级别为最强压缩,但时间要花得多一点
            zipOut.setLevel(Deflater.BEST_COMPRESSION);

            handleFile(zipFile, zipOut, "");
            // 处理完成后关闭我们的输出流
            zipOut.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

    /**
     * 由doZip调用,递归完成目录文件读取
     * 
     * @param zipFile
     * @param zipOut
     * @param dirName
     *            这个主要是用来记录压缩文件的一个目录层次结构的
     * @throws IOException
     */
    private static void handleFile(File zipFile, ZipOutputStream zipOut, String dirName)
            throws IOException {
        System.out.println("遍历文件:" + zipFile.getName());
        // 如果是一个目录,则遍历
        if (zipFile.isDirectory()) {
            File[] files = zipFile.listFiles();

            if (files.length == 0) {// 如果目录为空,则单独创建之.
                // 只是放入了空目录的名字
                zipOut.putNextEntry(new ZipEntry(dirName + zipFile.getName()
                        + File.separator));
                zipOut.closeEntry();
            } else {// 如果目录不为空,则进入递归,处理下一级文件
                for (File file : files) {
                    // 进入递归,处理下一级的文件
                    handleFile(file, zipOut, dirName + zipFile.getName()
                            + File.separator);
                }
            }
        }
        // 如果是文件,则直接压缩
        else {
            FileInputStream fileIn = new FileInputStream(zipFile);
            // 放入一个ZipEntry
            zipOut.putNextEntry(new ZipEntry(dirName + zipFile.getName()));
            int length = 0;
            byte[] buffer = new byte[1024];
            // 放入压缩文件的流
            while ((length = fileIn.read(buffer)) > 0) {
                zipOut.write(buffer, 0, length);
            }
            // 关闭ZipEntry,完成一个文件的压缩
            zipOut.closeEntry();
        }

    }
}

场景一、从项目assets文件夹拷贝zip包到手机sd卡并解压。

1、首先拷贝zip包至sd卡:UnZip.CopyAssets(this, xxx.zip);

‘xxx.zip’参数就是压缩包的名字加后缀,这里我的包就放在assets根目录,拷贝到sd卡根目录。

2、解压拷贝至sd卡的zip包:UnZip.unZip(this, ZipFileName, UnZipLocation);

'ZipFileName' 就是zip所在的位置路径,
如:android.os.Environment.getExternalStorageDirectory() + "/xxx.zip"
'UnZipLocation' 就是需要解压到的位置,
如:android.os.Environment.getExternalStorageDirectory() + "/"

至此一个zip包就从项目里面拷贝到sd中并解压了。当然实际项目中还得判断是否有内存卡,是否文件存在等。

场景二、将sd卡中的文件夹压缩成zip包:

UnZip.doZip(FileName, ZipFileName);

‘FileName’ 就是你sd卡中文件夹路径,不管里面有多少个子文件或子文件夹都可以。这里我的路径是:
android.os.Environment.getExternalStorageDirectory() + “/文件夹名”

‘ZipFileName’ 就是需要压缩成zip包的路径。如:android.os.Environment.getExternalStorageDirectory() + “/文件夹名.zip”

好了,文件的解压缩操作大致就这些了。

RouterOS网桥VLAN实战:从零构建安全隔离的二层虚拟网络 本文详细讲解了如何在RouterOS上利用网桥和VLAN功能,从零开始构建安全隔离的二层虚拟网络。通过分步实战演示,涵盖核心概念、网桥创建、PVID设置、VLAN规则配置及安全过滤,帮助网络管理员实现办公、访客与服务器网络的逻辑隔离与灵活管理,提升网络安全性。 阅读详情

相关推荐

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法:①检查PyCharm导入的环境是否错误②添加Torch包

qq_59942266的博客 4970

Android 将Assets 目录中的ZIP压缩包解压至本地指定文件中

Android解压Assets中压缩包

hadese的博客 2690

STM32F103C8T6蓝莓派用HAL库GPIO模拟SPI驱动MAX31865读取PT100温度(附完整代码)

本文详细介绍了如何在STM32F103C8T6蓝莓派开发板上使用HAL库通过GPIO模拟SPI驱动MAX31865读取PT100温度传感器的完整方案。内容包括硬件连接、CubeMX配置、GPIO模拟SPI实现、温度计算算法及常见问题排查,并附有完整代码示例,帮助开发者快速实现高精度温度测量。

weixin_30684743的博客 937

Android 实现解压ZIP(1.ZIP大小,2.进度)

一、添加 1.在电脑把hello.txt(内容随写什么都行)转换成hello.zip,这zip文件复制到手机路经/storage/emulated/0/ 在手机文件管理中看到: 2.读写权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE

彬sir哥的博客 1020

ENVI+SARscape实战:从哨兵一号数据到地震形变制图全流程解析

本文详细解析了使用ENVI和SARscape软件从哨兵一号数据生成地震形变图的全流程,包括数据获取、干涉处理、相位解缠等关键步骤。通过实战技巧和参数设置建议,帮助用户高效处理SAR数据,提升地震形变监测的精度和可视化效果。

weixin_30460489的博客 385

防火墙学习5---虚拟系统和跟系统通过路由表互访

虚拟系统与跟系统互访可分为虚拟系统访问根系统和跟系统访问虚拟系统。

weixin_48030849的博客 1032

Android资源目录assets及raw

以一下匀为摘抄网络,只是为本人方便提供所摘抄。 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,ASSETS支持任意深度的子目录。这些文件不会生成任何资源ID. res:用于存放应用程序的资源(如图标、GUI布局等),将被打包到编译后的Java中。不支持深度子目录 res/raw:存放通用的文件, 该文件夹内的文件将不会被编译成二进制文件,按

luckyjda — —you can , I can . you can't , I can ! 1864

冲压机器人系列编程:ABB IRB 6700_(6).RAPID编程语言入门

主菜单:包含文件、编辑、视图、工具等常用操作。项目浏览器:显示当前项目的文件结构,包括机器人模型、程序模块等。图形界面:用于创建和编辑机器人的虚拟环境。RAPID代码编辑器:用于编写和编辑RAPID代码。仿真控制面板:用于控制仿真过程,包括启动、暂停、停止等。变量是存储数据的容器,可以通过变量名访问和修改其存储的数据。变量定义时需要指定其类型和名称。% 定义一个整数变量并赋初值% 定义一个实数变量,未赋初值函数定义时需要指定其返回类型和参数。num result;子程序类似于函数,但不返回值。

zhubeibei168的博客 1378

android assets绝对路径,Android获取assets文件路径

我们有时候需要放置一些资源例如json,字体,视频,音频以及其他格式的资源。为了保证这些资源不被编译,以便于我们在代码中可以正常使用,我们可以放置到assets文件夹下。这个文件夹在哪呢?看下图,Android Studio新建一个项目是没有这个文件夹的,你可以在需要的时候新建这个文件夹。但是有时候我们需要的是获取文件的路径,file:///android_asset/data.xx貌似并不是可以...

weixin_35931648的博客 2326

YOLOv26全流程实战手册:从yaml配置拆解到训练推理参数调优(附虚拟环境搭建)

以“车辆、行人、小型物体”3类数据集为例,修改# 1. 修改类别数nc: 3# 2. 调整锚框(适配小目标)anchors:- [12,16, 16,24, 33,23] # 增加小锚框# 3. 轻量化调整(边缘部署)depth_multiple: 0.25 # 降低深度系数width_multiple: 0.20 # 降低宽度系数# 其余Backbone/Head结构不变yaml配置:核心是调整nc(类别数)、(轻量化)、anchors(适配目标尺度);虚拟环境。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 879

RK3588 buildroot 制作的系统增加 docker 支持

RK3588 使用buildroot制作的系统添加 docker 和 docker-compose 的功能

荻夜的博客 1567

Android Java如何解压缩标准ZIP包

Android Java如何解压缩标准ZIP包: /** * 解压缩标准ZIP文件,耗时操作,建议放入异步线程 * @return The number of decoded files of ZIP. */ public static int unZipStandard(String workingDir, String zipFilePath

我的专栏 687

零基础入门生信转录组数据分析——导读

转录组数据分析(上游,下游,数据可视化)专栏的目录,可以直接通过点击各个分析点直接跳转到相关帖子,方便查找和观看

呆猪儿的博客 1万+

android 选择打开系统软件解压缩zip包

//android获取一个用于打开ZIP文件的intent public static Intent getZipFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.cat

Schrodinger' Code 1008

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Android】ZipException: Invalid zip entry path: /xxxx 错误

对于以 Android 14 为目标平台的应用,Android 通过以下方式阻止 Zip 路径遍历漏洞:如果 zip 文件条目名称包含“…”或以“/”开头,则 ZipFile(String) 和 ZipInputStream.getNextEntry() 会引发 ZipException。应用可以通过调用 dalvik.system.ZipPathValidator.clearCallback() 来选择退出此验证。此外,您还可以监听相关的回调。

weixin_42473228的博客 633

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

墨迹天气php,Android_仿墨迹天气在Android App中实现自定义zip皮肤更换,在这里谈一下墨迹天气的换肤 - phpStudy...

仿墨迹天气在Android App中实现自定义zip皮肤更换在这里谈一下墨迹天气的换肤实现方式,不过首先声明我只是通过反编译以及参考了一些网上其他资料的方式推测出的换肤原理, 在这里只供参考. 若大家有更好的方式, 欢迎交流.墨迹天气下载的皮肤就是一个zip格式的压缩包,在应用的时候把皮肤资源释放到墨迹天气应用的目录下,更换皮肤时新的皮肤资源会替换掉老的皮肤资源每次加载的时候就是从手机硬盘上读取图...

weixin_42501904的博客 393

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

亲测可用的更新Android SDK Manager方法

今天更新sdk的时候发现一直更新不成功,之前找的设置host和代理的方法现在用不成了。网上搜了一下,找到一种稍微麻烦的方法成功了。 简单说一下这个方法: 根据自己的需要去下载对应的zip包,比如我要更新到build-tools到20的版本,我就下载build-tools_r20-windows.zip。 解压zip文件后发现有一个android-4.4W文件夹,因为我下载的是build-to

umbrella_show的专栏 1659

Android压缩文件(压缩目录)

原文地址点击打开链接 在Android中我们很多时候需要进行压缩与解压缩,就如本人的[ 足球即时比分 ]应用中也用到过.需要将一些信息进行收集再进行压缩,最后将压缩文件上传到服务器中(如何上传将文件上传到服务器中可以看我另一篇帖子 :[ Android上传文件到服务器 ]).   以下我的使用到的工具类的代码.需要注意的是,进行压缩与解压缩都不支持中文名,如果需要支持中

chenfengdejuanlian的专栏 4425

FileTool类

package com.mobimtech.natives.ivp.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import

kaixinbingju的专栏 2057

制作Android ROM的步骤

http://marshal.easymorse.com/archives/3622 制作Android ROM的步骤 制作Android ROM有两种方法: 编译Android源代码的方法,这个比较复杂,以后再介绍; 在已有的ROM基础上制作或者叫定制自己的ROM。 本文介绍的是在已有ROM基础上的定制步骤。 我这里使用的机器是Nexus One,于是下载了第三方的ROM,这...

weixin_30458043的博客 105

实例:使用OKGO下载网络压缩包资源,然后解压缩放在本地使用

一,前期基础知识储备 1)svg图片较大,所以需要压缩为zip包后放在服务器上,下载使用; 2)使用OKGO库进行网络资源下载; 3)使用工具库Blankj中的解压缩工具进行解压缩后,然后保存在本地; 4)下载并且解压缩zip成功后,删除本地zip包,只保留解压缩得到的svg资源。 二,上代码,具体实现 1)引入OKGO和Blankj依赖: implementation 'com.lzy.net:okgo:3.0.4' implementation 'com.blankj:utilcod

Chin_Style的博客 591

使用org.apache.tools.zip解压和压缩文件

解压zip文件中文乱码 参考博客: Android中解压zip中文乱码处理 android通过org.apache.tools.zip解压zip压缩文件,支持中文名 关于为什么解压zip包时会出现中文乱码,可以参考博客Android中解压zip中文乱码处理,主要原因就是不同的操作系统压缩文件时采用的编码方式不同, windows默认是GBK编码方式, mac系统默认的文字编码格式是utf-8。 解决方案: 由于java自带的解压缩包不能在压缩文件中存在中文名,使用apache的开发包org.apach

bailang426的博客 2058

Android_JarZip压缩和解压文件

    本文资料来自《android开发权威指南》 AndroidSDK中提供了java.util.jar和java.util.zip包中的若干类和接口来完成。 压缩文件基本步骤: 1、创建一个JarOutputStream或ZipOutputStream对象,分别用来生成jar或zip文件。 2、创建了(jar|zip)OutputStream对象,还不能直接向输出流写入数据。由于压...

weixin_34345753的博客 88

linux命令输出到文本文件,【Linux开发】将cmd中命令输出保存为TXT文本文件

使用国内pypi源来安装python包国内源 http://pypi.douban.com/ 豆瓣 http://pypi.hustunique.com/ 华中理工大学 http://pypi.sdutlinux.org/ 山东理工 ...MySQL数据库的备份与还原http://www.cnblogs.com/lql123/p/6090681.html //安装WordPress 1...

weixin_42405890的博客 198

个人Agent接入AI硬件实战:Muse Gadgets桥接层架构与本地优先设计

个人Agent是一种具备记忆、主动性和工具调用能力的软件实体,其核心原理在于将推理循环与硬件外设解耦。在工程实践中,通过桥接层屏蔽麦克风、扬声器、屏幕等外设差异,可实现低延迟、隐私可控的本地优先交互。Muse Gadgets作为硬件侧的驱动适配层与事件总线,让Agent逻辑无需啃数据手册即可驱动实体设备。典型应用场景包括桌面终端、随身语音助手与智能家居控制,尤其适合需要离线可用与数据不出门的个人AI硬件开发。

weixin_33829657的博客 218

android应用层相关设置及命令

网上搜了一些资料及同事指教,作如下笔记: 1.  去掉下拉状态栏: frameworks/base/core/res/res/values/dimens.xml -    25dip +    0dip 2. 屏幕锁定方式改为无 frameworks/base/packages/SettingsProvider/res/values/defaults.xml -

Junior的专栏 1029
上一篇: Android 仿今日头条首页标题栏效果
下一篇: Android 65k 问题
Mackkill
博客等级 码龄15年 65粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值