问题标签 [zipinputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
48894 浏览

java - 从 ZipInputStream 读取到 ByteArrayOutputStream

我正在尝试从 a 读取单个文件java.util.zip.ZipInputStream,并将其复制到 ajava.io.ByteArrayOutputStream中(这样我就可以创建 ajava.io.ByteArrayInputStream并将其交给最终关闭流的 3rd 方库,我不希望我ZipInputStream被关闭) .

我可能在这里遗漏了一些基本的东西,但我从来没有在这里进入 while 循环:

我错过了什么可以让我复制流?

编辑:

我之前应该提到这ZipInputStream不是来自文件,所以我认为我不能使用ZipFile. 它来自通过 servlet 上传的文件。

另外,我已经在访问这段代码之前调用getNextEntry()过。ZipInputStream如果我不尝试将文件复制到另一个InputStream(通过OutputStream上面提到的),而只是传递ZipInputStream给我的第 3 方库,库将关闭流,我不能再做任何事情,比如处理剩余的文件流。

0 投票
1 回答
374 浏览

ruby - Ruby 的 ZipInputStream 搞砸了我的行尾是怎么回事?

我会很高兴 ZipInputStream 对存储在文件中的行结尾采取不雅的自由,如果它至少能让它们适合我存储文件的平台。不幸的是,我从 zip 中提取了一个文本文件(.txt、.cpp..etc.),并且 \n (0x0A) 被替换为 \r\n (0x0d0a),正如您可以想象的那样,这是导致我很麻烦。

是否可以设置一个标志来告诉它完全避免更改行尾或使用我选择的一个?

谢谢。

(我已经检查了 zip 文件、我的创建等。我已经使用其他 zip 工具将其解压缩并验证它是否已正确存档。我已经使用 rdebug 逐步完成了我的项目并看到 ZipInputStream 调用读取() 返回 \r\n 作为行尾。)

0 投票
2 回答
4030 浏览

java - 不使用 ZipFile 随机访问压缩文件(因为 ZipFile 有一个重大错误)

我知道,我知道,谁会想要在 java 中压缩或未压缩的大文件。完全不合理。暂时不要怀疑,假设我有充分的理由解压缩一个大的 zip 文件。

问题 1:ZipFile有一个错误 (bug # 6280693),sun 在 java 1.6 (Mustang) 中修复了这个问题。由于我们的软件需要支持 java 1.4,因此修复并没有帮助。据我了解,该错误是这样工作的。运行以下代码时,Java 会分配一块足够大的内存来保存整个文件。

如果 /tmp/myFile.zip 是 4gb,java 分配 4gb。这会导致堆外异常。不幸的是,+4gb 的堆大小不是一个可接受的解决方案。=(

问题1的解决方案:使用ZipInputStream,将文件作为流处理,从而减少和控制内存占用。

问题 2:我想随机访问 ZipEntries。也就是说,我只想解压缩一个 ZipEntry,而不必搜索整个流。目前我正在建立一个名为 zes 的 zipEntries 列表:

然后,当我需要解压缩特定的 zipEntry 时,我会遍历所有 zipEntry,直到找到匹配的 zipEntry,然后将其解压缩。

问:ZipFile 有能力随机访问 ZipEntries。

我如何在不使用 ZipFile 的情况下获得同样的能力?

请注意 ZipInputStream 有一些相当奇怪的 行为

可以在这里找到关于 java 和 ZipFiles 的特别好的文档:

http://commons.apache.org/compress/zip.html

按照答案中的建议,将 sun ZipFile 替换为 apache commons ZipFile 的注意事项:

  1. Sun 的ZipFile.entries()总是按照它们在文件中出现的顺序返回 ZipEntries,而 apache commons ZipFile.getEntries()以随机顺序返回条目。这导致了一个有趣的错误,因为一些代码假设条目是“按顺序”的。
0 投票
3 回答
7931 浏览

java - 从 byte[] (Java) 读取时提取 ZipFile 条目的内容

我有一个 zip 文件,其内容显示为 byte[]但原始文件对象不可访问。我想阅读每个条目的内容。我能够从字节的 ByteArrayInputStream 创建一个 ZipInputStream,并且可以读取条目及其名称。但是,我看不到提取每个条目内容的简单方法。

(我看过 Apache Commons,但也看不到简单的方法)。

更新@Rich的代码似乎解决了这个问题,谢谢

QUERY为什么这两个例子的乘数都是 * 4 (128/512 and 1024*4) ?

0 投票
1 回答
3840 浏览

java - 尝试使用 ZipInputStream 解压缩字符串值时出现 IOException 推回缓冲区已满

我正在尝试解压缩字符串值。
但我得到一个java.io.IOException: Push back buffer is full

异常堆栈跟踪:

0 投票
1 回答
3378 浏览

java - 使用 ZipInputStream 从 docx 文件中获取 document.xml

我有一个 docx 文件的 inputStream,我需要获取位于 docx 内的 document.xml。

我正在使用 ZipInputStream 来读取我的流,我的代码类似于

如您所见,zipEntry.getName 的输出有时会以“word/document.xml”的形式出现。我需要将此 document.xml 作为流传递,与 ZipFile 方法不同,您可以在调用 .getInputStream 时轻松传递它,我想知道如何执行此 docXFile?

提前致谢, 米纳克希

@Update:我找到了这个解决方案的输出:

我想知道是否有一些基本的 API 可以将此输出流转换为输入流?

0 投票
5 回答
4261 浏览

scala - 使用 ZipInputStreams 和 ZipOutpuStreams 时如何避免 Scala 中的可变变量?

我正在尝试读取一个 zip 文件,检查它是否有一些必需的文件,然后将所有有效文件写入另一个 zip 文件。java.util.zip的基本介绍有很多 Java 主义,我想让我的代码更原生于 Scala。具体来说,我想避免使用vars. 这是我所拥有的:

我应该补充一点,我正在使用 Scala 2.7.7。

0 投票
4 回答
3471 浏览

java - 解压后打开/下载 zip 文件的问题 (Java/ZipInputStream)

背景
目前,我尝试通过带有 HTTP 请求的 HTTP servlet 获取 zip 文件。收到的 zip 文件包含三个不同的文件。这些文件包含我想要过滤掉的信息,并且从源头执行此操作不是一种选择(就是这样,尽管我知道它会好得多)。

因为我无法从源文件中过滤掉文件中的一些信息,文件是从头构建的,所以我的解决方案是解压文件,将这三个文件读取为字符串,然后过滤它们。最后“重建”全部为“zipfile”(inputStream)并返回inputStream。

问题
目前,我做了一个类来处理文件的解压和过滤。最后,我只想返回包含 zip 文件和其中三个文件的新 inputStream。

我已经将 HTTP 实体中的内容获取到 inputStream 中,解压缩此 inputStream 并将三个文件作为三个字符串获取。为了尝试看看这是否有效,我目前不想做的不仅仅是解压缩它们并关闭 inputStream 并返回它。但是当我返回 inputStream 时,这确实会导致异常:

这是因为 inputStream 是在我下面介绍的函数之外使用的。当我关闭 zipInputStream 时,我可能还会关闭 inputStream 以进行进一步的工作。

当前代码

我希望我能够尽可能清楚地表达这一点。我仍然可以看到,当我无法在此函数之外显示整个解决方案时,这很难理解。

0 投票
1 回答
633 浏览

zip - 如何通过单个 InputStream 读取多个 ZipEntries

我必须将 InputStream 作为参数传递给第 3 方库,该库将从 InputStream 读取完整内容并完成其工作。

我的问题是,我的一些文件是 Zip 文件 - 有多个 ZipEntry。据我了解,一次可以读取一个 zipEntry,然后执行 zipInputStream.getNextEntry() ,然后再次读取,依此类推。但是,第 3 方库不理解这一点,需要一个 InputStream。zip 文件的所有 zipEntries 都应作为单个 inputStream 提供。

请赐教我如何做到这一点。我不能使用 ZipFile,因为文件没有存储在本地(在不同的服务器中)。我也无法读取所有 zipEntries 并构造 ByteArrayOutputStream 或字符串,因为文件可能非常大,这会导致内存使用量激增。

我想要一种方法让一个 inputStream 透明地从单个 zip 文件的多个 zip 条目中读取。

在此先感谢,普拉萨纳

0 投票
3 回答
4533 浏览

c# - 使用 File.OpenRead 打开文件时出现 System.IOException

当我打开文件以解压缩其内容时,出现以下异常。当我在 Windows 资源管理器中选择文件或将鼠标悬停在显示工具提示的文件时会发生这种情况。

有没有办法等到文件不再使用然后读取它?基本上我只是查看任何新 zip 文件的文件夹,解压缩 zip 文件的内容,然后将其删除。

事件处理程序: