android从zip文件中解压缩文件夹并从该文件夹中读取内容

2023-12-20

在我的一个应用程序中,我需要提取一个 zip 文件,其中包含文件夹,并且该文件夹包含图像,这意味着 abc.zip=>adb(folder)=>abc.png 我想提取图像文件

我用下面的方法

 private boolean extractFolder(File destination, File zipFile) throws ZipException, IOException
    {
        int BUFFER = 8192;
        File file = zipFile;
        //This can throw ZipException if file is not valid zip archive
        ZipFile zip = new ZipFile(file);
//        String newPath = destination.getAbsolutePath() + File.separator + FilenameUtils.removeExtension(zipFile.getName());
        String newPath = destination.getAbsolutePath() + File.separator + zipFile.getName();
        //Create destination directory
        new File(newPath).mkdir();
        Enumeration zipFileEntries = zip.entries();

        //Iterate overall zip file entries
        while (zipFileEntries.hasMoreElements())
        {
            ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();
            String currentEntry = entry.getName();
            File destFile = new File(newPath, currentEntry);
            File destinationParent = destFile.getParentFile();
            //If entry is directory create sub directory on file system
            destinationParent.mkdirs();

            if (!entry.isDirectory())
            {
                //Copy over data into destination file
                BufferedInputStream is = new BufferedInputStream(zip
                        .getInputStream(entry));
                int currentByte;
                byte data[] = new byte[BUFFER];
                //orthodox way of copying file data using streams
                FileOutputStream fos = new FileOutputStream(destFile);
                BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);
                while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
                    dest.write(data, 0, currentByte);
                }
                dest.flush();
                dest.close();
                is.close();
            }
        }
        return true;//some error codes etc.
    }

但得到zipfolder/foldername/ (Is a directory)


private void unzip(String src, String dest){

        final int BUFFER_SIZE = 4096;

        BufferedOutputStream bufferedOutputStream = null;
        FileInputStream fileInputStream;
        try {
            fileInputStream = new FileInputStream(src);
            ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(fileInputStream));
            ZipEntry zipEntry;

            while ((zipEntry = zipInputStream.getNextEntry()) != null){

                String zipEntryName = zipEntry.getName();

                String name = dest.substring(dest.lastIndexOf("/")-1);

                File FileName = new File(FolderName);
                if (!FileName.isDirectory()) {
                    try {
                        if (FileName.mkdir()) {
                        } else {
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                File file = new File(FolderName+"/" +zipEntryName);

                if (file.exists()){

                } else {
                    if(zipEntry.isDirectory()){
                        file.mkdirs();
                    }else{
                        byte buffer[] = new byte[BUFFER_SIZE];
                        FileOutputStream fileOutputStream = new FileOutputStream(file);
                        bufferedOutputStream = new BufferedOutputStream(fileOutputStream, BUFFER_SIZE);
                        int count;

                        while ((count = zipInputStream.read(buffer, 0, BUFFER_SIZE)) != -1) {
                            bufferedOutputStream.write(buffer, 0, count);
                        }

                        bufferedOutputStream.flush();
                        bufferedOutputStream.close();
                    }
                }
            }
            zipInputStream.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

试试这个代码,它对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android从zip文件中解压缩文件夹并从该文件夹中读取内容 的相关文章

  • 64位版本的adb和fastboot?

    我在 Debian 7 3 x64 已完全修补 上发现了以下错误 我很确定这是因为adb即使在其 SDK 工具的 64 位发行版中也是 32 位 which adb opt android sdk platform tools adb op
  • 如何获取firebase数据库中所有孩子的数据?

    我有这个 firebase 数据库 我需要获取用户的所有电话号码 我应该使用哪个侦听器来获取所有孩子 每个用户都作为一个对象添加 其中用户 ID 作为该对象的名称 我需要在不知道用户 ID 的情况下检索该对象 我搜索了文档 它与DataSn
  • Android:图形布局不起作用 - 不显示任何内容

    我的情况是 我曾经制作过一个android项目 2 2版本 但很快需要格式化我的电脑 格式化后 我再次下载了 eclipse 但是当我导入项目时 我无法使用 xml 的 图形布局 菜单 它没有向我显示如下图所示的任何内容 http img5
  • android 无法解析方法 setcontentview

    今天在android studio 中遇到了一个错误 我正在尝试在应用程序中创建一个关于我们的屏幕 布局 xml 文件已创建 任何帮助表示赞赏 谢谢 错误 无法解析方法 setcontentview int package example
  • 如何在不将焦点设置到另一个控件的情况下删除焦点?

    我喜欢直观的用户界面 每个屏幕都应该自然 不引人注目地引导用户进入应用程序的下一步 除此之外 我努力让事情尽可能地令人困惑和混乱 只是在开玩笑 我有三个TableRows 每个都包含一个只读且不可聚焦的 EditText 控件 然后在其右侧
  • 如何避免 Android 游戏中的时钟漏洞?

    我需要测量一段可以持续几个小时的时间 我假设执行此操作的正常方法是这样的 Date date new Date wait some time new Date getTime date getTime 但是用户是否可以将 Android 的
  • 继续使用 sketch.js 编辑草图图像 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用 sketch js 中的示例 http intridea github io sketch js http intridea g
  • 在原生 Android 应用程序中集成多个 Unity 游戏

    我有一个原生 Android 应用程序 我想在其中嵌入多个 Unity 游戏 我跟着link https medium com davidbeloosesky embedded unity within android app 7061f4
  • 空对象引用上的 SupportMapFragment.getMap()

    在尝试了几乎所有方法之后 我似乎无法在不提取空对象引用的情况下 getmap 我试图将 google mapfragment 膨胀为一个片段 但是每次这样做时我总是保留一个 getmap null object 这是我的代码 我现在非常需要
  • 是否可以为 DialogFragment 制作动画?

    我尝试了有关片段动画的各种示例 但没有任何反应 所以 DialogFragment 不是 正确的 片段吗 或者我在这里遗漏了什么 FragmentTransaction ft getFragmentManager beginTransact
  • Gradle 构建失败 - 无法解压

    我正在使用 android studio 做一个项目 最近它显示了一个错误your SDK is missing or out of date所以 我再次下载了SDK 现在它显示一个错误 Gradle Build failed 错误如下 E
  • Android 5.0 - 在模块中声明自定义权限

    我在 Android Studio 中有一个模块 我在多个应用程序 均使用不同的密钥签名 中使用该模块来处理 GCM 通知 在 GCM 客户端文档中 他们说要定义包命名空间自定义权限
  • 在 Android 中将图像从可绘制图像转换为字节数组

    由于我要将图像发送到 Parse com 因此我必须将其转换为字节数组 我的第一种方法是从图库中选择图像并将其转换为字节数组 如下所示 Override protected void onActivityResult int request
  • Ctrl 单击 Eclipse 中的类显示二进制/jar 而不是源

    使用Eclipse 版本 Helios 服务版本 2 内部版本号 20110218 0911 与Android插件 我有一个 Android 项目 AndroidUtil 它被标记为我的主要 Android 应用程序的 库 项目 当我按住
  • SpannableString 中的 URLSpan

    我正在使用这个例子SpannableString http developer android com resources samples ApiDemos src com example android apis text Link ht
  • popBackStack导致反复调用fragment的oncreateView

    我有 3 个片段 A B C 我编写了一段代码来替换它们并维护 backstack public void addFragment Fragment fragmentToAdd String fragmentTag FragmentMana
  • RecyclerView 来自 Firebase 的部分和数据

    您好 我正在开发一个应用程序 在其中我必须使用 Firebase 填充数据回收器视图 准备就绪 现在我想做的是用 data firebase 填写一个 recyclerview 但有一些部分将成为托管 data firebase 的父级 我
  • 如何在android中使用Room Persistence ORM工具实现created_at和updated_at列

    我该如何实施created at and updated at在Android中使用Room Persistence ORM工具的列 可以在创建或更新表中的行时自动更新时间戳 我研究了很多网站 但仍然没有找到任何可以处理的结果middlew
  • 带预览和进度栏的 Twitter Bootstrap 图像上传

    我如何使用 Twitter Bootstrap 上传带有预览和进度条的单个图像 目前 在保存图像之前 我看不到上传图像的任何预览或进度条 Jasny 的 Bootstrap 分支让您能够接近这一点 看文档 http jasny github
  • 扩展Android应用程序类

    当我正在寻找从远程设备获取错误报告的解决方案时 就像 iOS 中的试飞应用程序一样 我发现了acra适用于 Android 设备here http code google com p acra wiki BasicSetup 在基本设置中

随机推荐

  • 我如何通过迁移的帮助将数据插入表中,并且该表是之前通过另一个迁移生成的

    我有一个包含用户名 角色和公司的角色表 我想通过新的迁移文件将数据插入到该表中 那么我该怎么做 我得到了这样的代码 但我如何使用它以及我无法理解的地方 class Foo lt ActiveRecord Migration def self
  • 为什么 EOF(文件结尾)在行尾没有 '\n' 之前不起作用?

    于是我开始用ANSI C的书来学习C 本书的早期练习之一是编写一个程序 该程序接受文本输入并在新行上打印每个单词 这很简单 所以我做了 include
  • 如何从 Visual Studio 中打开 TFS 中的单个变更集

    有人通过电子邮件给我发送了一个 TFS 变更集 ID 现在我正在尝试打开这个单个变更集 在 Visual Studio 中 VS 2008 如果重要的话 有一个简单的方法可以做到这一点吗 在 Visual Studio 中 键盘快捷键可用于
  • 在java中使用没有“循环”的标签

    我一直认为标签必须仅与循环一起使用 但似乎并非如此 给出这样的代码 public class LabelTest public static void main String args label1 System out println l
  • 鼠标放大算法(OpenGL)

    我有一个带有左上角坐标系的 OpenGL 场景 当我 glScale 时 它 从左上角的 0 0 放大 我希望它从鼠标坐标 相对于 OGL 框架 放大 这是怎么做到的 谢谢 我相信这可以通过四个步骤来完成 使用窗口系统 即 GLUT 或 S
  • 如果结果来得太晚,则限制但丢弃结果

    我正在编写一个用户界面 用户可以在其中输入搜索词 并且列表会不断更新以提供建议 我的第一反应是 Rx 原始 Throttle 是一个完美的匹配 但它让我成功了一半 这些建议需要一段时间才能获取 因此我在 UI 线程上异步获取它们 问题是 如
  • errno 值未更新 (c++)

    我是编码新手 目前正在学习 C 我了解一点 C 正在阅读 math h 中的函数并阅读 errno 根据我提到的网站 域错误 输入参数超出了运算的数学定义范围 例如 std sqrt 1 std log 1 或 std acos 2 如果设
  • 使用非原始参数进行参数化 JUnit 测试?

    很有可能使用参数运行 JUnit 测试 其中使用不同的数据多次执行相同的测试方法 如下所述 http junit org apidocs org junit runners Parameterized html http junit org
  • Spring可为空注释生成未知枚举常量警告

    在我的应用程序中 每当我添加 Nullable 从进口org springframework lang Nullable 到任何字段 我都会收到构建警告 警告 java 未知的枚举常量 javax annotation meta When
  • 将点添加到r中的3d图中

    我是 R 中 3D 绘图的初学者 我需要帮助 我尝试绘制一些简单的抛物面 library rgl x lt seq 1 1 0 2 y lt x f lt function x y x 2 y 2 z lt outer x y f pers
  • 如何在 Typescript 中使用 Ziggy 包

    所以我想创建一个使用 axios 检索数据的打字稿类 但我无法找到使用的方法route ziggy 在我的 Typescript 类中提供的函数 因为它不是 npm 包 我对 Node js 还是很陌生 任何帮助是极大的赞赏 import
  • 在 Python 中将列表项与大文件中的行进行匹配的最有效方法是什么?

    我有一个大文件 5Gb 名为my file 我有一个名为my list 读取文件中每一行的最有效方法是什么 如果来自my list匹配以下行中的项目my file 创建一个名为的新列表matches包含以下行中的项目my file以及来自的
  • docker 与 openshift 相比如何?

    Docker http www docker io and 开放式班次 https www openshift com 都是实现 PaaS 服务的框架 它们在架构和功能方面如何比较 主要区别在于 Docker 作为一个项目仅关注运行时容器
  • Android 获取屏幕高度

    Android 中如何获取屏幕的可用高度 我需要减去状态栏 菜单栏或屏幕上可能出现的任何其他装饰的高度 并且我需要它适用于所有设备 另外 我需要在 onCreate 函数中知道这一点 我知道这个问题之前已经被问过 但我已经尝试过他们的解决方
  • 值超出指定精度 0,小数位数为 0

    我正在尝试为 Apache Drill v1 15 创建自定义函数 当使用 Decimal 作为output数据类型 即使是最简单的例子也会失败 当使用其他数据类型 int float 时 它工作得很好 有没有简单的方法 如何使小数作为 U
  • HBase:get(...) 与扫描和内存表

    我正在 HBase 上执行 MR 减速器中的业务逻辑大量访问两个表 例如 T1 40k 行 和 T2 90k 行 目前 我正在执行以下步骤 1 在reducer类的构造函数中 执行如下操作 HBaseCRUD hbaseCRUD new H
  • PHAsset 获取原始文件名

    我想知道有没有办法使用PHAsset获取原始文件名 我使用以下代码来提取文件信息 PHImageManager defaultManager requestImageDataForAsset asset options requestOpt
  • 嵌入 CPython:如何构造 Python 可调用对象来包装 C 回调指针?

    假设我将 CPython 解释器嵌入到一个用 C 编写的较大程序中 该程序的 C 组件偶尔需要调用用 Python 编写的函数 并将回调函数作为参数提供给它们 使用 CPython扩展和嵌入 https docs python org 3
  • 如何连接SQLite3数据库服务器?

    我知道 SQLite3 不在客户端 服务器数据库应用程序模型下运行 所以我想知道如何使用 SQLite3 实际连接到 正在运行 的数据库服务器 这意味着如果我有一个在带有 SQLite3 的 Linux 上运行的数据库服务器 客户端将如何连
  • android从zip文件中解压缩文件夹并从该文件夹中读取内容

    在我的一个应用程序中 我需要提取一个 zip 文件 其中包含文件夹 并且该文件夹包含图像 这意味着 abc zip gt adb folder gt abc png 我想提取图像文件 我用下面的方法 private boolean extr