在java中读取Zip文件内容而不解压

2024-01-28

我有 byte[] zipFileAsByteArray

This zip file has rootDir --|
                            | --- Folder1 - first.txt
                            | --- Folder2 - second.txt  
                            | --- PictureFolder - image.png  

我需要的是获取两个txt文件并读取它们,而不在磁盘上保存任何文件。只要在记忆中做就可以了。

我尝试过这样的事情:

ByteArrayInputStream bis = new ByteArrayInputStream(processZip);
ZipInputStream zis = new ZipInputStream(bis);

我还需要有单独的方法来获取图片。像这样的事情:

public byte[]image getImage(byte[] zipContent);

有人可以帮助我提供如何做到这一点的想法或好例子吗?


这是一个例子:

public static void main(String[] args) throws IOException {
    ZipFile zip = new ZipFile("C:\\Users\\mofh\\Desktop\\test.zip");


    for (Enumeration e = zip.entries(); e.hasMoreElements(); ) {
        ZipEntry entry = (ZipEntry) e.nextElement();
        if (!entry.isDirectory()) {
            if (FilenameUtils.getExtension(entry.getName()).equals("png")) {
                byte[] image = getImage(zip.getInputStream(entry));
                //do your thing
            } else if (FilenameUtils.getExtension(entry.getName()).equals("txt")) {
                StringBuilder out = getTxtFiles(zip.getInputStream(entry));
                //do your thing
            }
        }
    }


}

private  static StringBuilder getTxtFiles(InputStream in)  {
    StringBuilder out = new StringBuilder();
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line;
    try {
        while ((line = reader.readLine()) != null) {
            out.append(line);
        }
    } catch (IOException e) {
        // do something, probably not a text file
        e.printStackTrace();
    }
    return out;
}

private static byte[] getImage(InputStream in)  {
    try {
        BufferedImage image = ImageIO.read(in); //just checking if the InputStream belongs in fact to an image
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(image, "png", baos);
        return baos.toByteArray();
    } catch (IOException e) {
        // do something, it is not a image
        e.printStackTrace();
    }
    return null;
}

请记住,虽然我正在检查字符串以区分可能的类型,但这很容易出错。没有什么可以阻止我发送具有预期扩展名的另一种类型的文件。

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

在java中读取Zip文件内容而不解压 的相关文章

  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 是否可以使用 Flying Saucer (XHTML-Renderer) 将 css 解析为类路径资源?

    我正在尝试将资源打包到 jar 中 但我无法让 Flying Saucer 在类路径上找到 css 我无法轻松构建 URL 来无缝解决此问题 https stackoverflow com questions 861500 url to l
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet

随机推荐

  • 递归 Haskell 函数似乎不会终止

    为了提高我的 Haskell 技能 我正在尝试解决2018 年代码的到来 https adventofcode com 正如预期的那样 我已经陷入了第一天 特别是第二部分 第二部分 您注意到设备重复相同的频率更改列表 以及结束 要校准设备
  • XCTestCase 未在 setUp 类方法中启动应用程序

    我正在使用 XCode 8 和 XCTestCase 我创建了一个类 setUp 函数 在所有测试之前运行一次 另一个 setUp 在每个测试用例之前运行 我希望应用程序在所有测试用例之前启动一次 如果我在类 setUp 中使用 launc
  • 使用 Naudio 将 MP3 文件转换为 WAV 文件时遇到问题

    瑙迪奥图书馆 http naudio codeplex com http naudio codeplex com 我正在尝试将 MP3 文件转换为 WAV 文件 但遇到了一个小错误 我知道出了什么问题 但我真的不知道如何解决它 这是我正在运
  • _GLIBCXX_USE_CXX11_ABI、GCC 4.8 和 ABI 兼容性

    我们收到了一些为 Linux 编译的库 a 可能是用 GCC 6 x 编译的 我们使用的是 GCC 4 8 并且收到以下类型的错误 undefined reference to std cxx11 basic string当尝试链接时 通常
  • PHP 邮件停止工作

    前几天使用的时候mail 我让它工作了 但现在不行了 而且我不知道问题是什么 to email protected cdn cgi l email protection subject the subject message hello h
  • 如何获取 JSON 对象数组中所有子节点的 JSONPath?

    如何获取对象所有子节点的 JSONPath E g var data key1 children key2 value key3 value key4 key2 value key3 value key4 key5 value key1 c
  • 使用 numpy 处理 exp 溢出

    使用 numpy 我有一个函数的定义 def powellBadlyScaled X f1 10 4 X 0 X 1 1 f2 numpy exp numpy float X 0 numpy exp numpy float X 1 1 00
  • 检查文件是否存在(由命令行参数给出)

    我需要一个使用unix环境的C程序 我已经购买了 Unix环境下的高级编程 一书 到目前为止它已经帮了我很大的忙 然而 我的一些问题没有得到解答 我正在寻求一些帮助 我正在尝试编写一个程序 可以验证是否存在复制程序时输入的第一个和第二个参数
  • readstream 管道未关闭

    我正在使用 sax js 读取大型 xml 文件 解析器完成后我无法让程序退出 这是脚本的形状 删除了解析器逻辑 var fs require fs var sax require sax var feedFile foo xml var
  • Google Cloud Endpoints 链接 iOS 客户端问题

    这个问题的产生是因为我不完全理解iOS中的静态库 而且谷歌的文档似乎有点稀疏 我正在尝试将 Google Cloud Endpoints 用于我的移动后端 我为我的客户端库生成 m 和 h 文件 然后我创建了一个新项目 OwnItApi 将
  • 将 fscanf 转换为 C 中的二维数组

    我想将 txt 中的元素扫描到数组中 txt 没有我将有多少行或列 它只包含一个坐标和数组的元素 它看起来像这样 2 3 2 1 3 0 我怎样才能将这些数字放入一个数组中 以便array 0 0 将2 and array 1 0 将3 e
  • 在 Crypto++ 中使用原始 RSA 算法加密和解密消息?

    我在用Crypto http git github com weidai11 cryptopp git密码学相关作品的图书馆 任务的子部分是加密和解密文本 该消息的长度最多为 256 个字符 包含字母数字 空格 点和特殊字符 这段代码适用于
  • WPF - 使用视频作为背景

    我想知道是否可以在 WPF 中使用视频作为背景 我的意思是 我希望在后台播放视频 并在其顶部添加控件 如果你还是不太明白我的意思 你应该看看这个网站 http www barrelny com recap 2012 http www bar
  • Laravel 数据透视表具有多列,需要稍后插入

    我有两张桌子routes and stations和一个数据透视表route station 详见表格 路线表 id number code 车站表 id name code 路线站表 枢轴 id route id station id n
  • 如何解析javadoc? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Java 阅读 javadocs 我的java对象有属性 描述 包裹名字 方法名称 方法描
  • 回显 jpassword 字符一次然后隐藏它

    在我的 swing 应用程序中 我想回显 jpassword 字段字符一段时间 1 秒 然后再次隐藏它 我想在用户输入字符后逐个字符地执行此操作 当用户输入字符时 显示它 然后隐藏它 然后对于所有输入字符重复此操作 有人可以告诉我这是否可能
  • XSLT 运行速度太慢

    我有大约 100 个 XML 文件 我想将它们转换为另一个具有更好结构的文件 本示例将其转换为 CSV 但我还有一个变体 可以将其转换为更好的 XML 格式与我无关 我看到有很多这样的问题 但我发现这些例子很难适应 因为问题不是样式表不起作
  • 在 Flutter 中,如何在本机文件资源管理器中为用户打开文件夹,以便用户可以浏览其文件/文件夹

    我正在 flutter 中构建一个文件储物柜应用程序 它可以锁定文件和文件夹 当用户解锁文件夹时 我希望我的应用程序显示一个在本机文件资源管理器中查看文件夹内容的选项 有什么办法可以实现这个功能吗 提前致谢 您可以针对您提到的用例尝试此包
  • 在具有特定约束的滚动视图中显示图像(使用自动布局)

    我想在视图控制器中显示标题和图像下方 我的限制是 标签可以位于屏幕顶部 50 像素处 标签可以有一行或多行 图像可以位于我的标签的 50 像素处 图像必须具有屏幕的宽度 滚动视图必须根据所有这些元素的大小进行滚动 我有一个带有滚动视图的视图
  • 在java中读取Zip文件内容而不解压

    我有 byte zipFileAsByteArray This zip file has rootDir Folder1 first txt Folder2 second txt PictureFolder image png 我需要的是获