Tag: zipinputstream

从byte (Java)读取时提取ZipFile条目的内容

我有一个zip文件,其内容显示为byte [], 但原始文件对象不可访问 。 我想阅读每个条目的内容。 我能够从字节的ByteArrayInputStream创建一个ZipInputStream,并可以读取条目及其名称。 但是我看不到提取每个条目内容的简单方法。 (我看过Apache Commons,但也看不到那么简单的方法)。 更新 @ Rich的代码似乎解决了这个问题,谢谢 QUERY为什么两个例子的乘数都是* 4(128/512和1024 * 4)?

Java从ZipInputStream条目创建InputStream

我想编写一个方法,从一个InputStream读取ZIP中的几个XML文件。 该方法将打开一个ZipInputStream,并在每个xml文件上获取相应的InputStream,并将其提供给我的XML解析器。 这是方法的骨架: private void readZip(InputStream is) throws IOException { ZipInputStream zis = new ZipInputStream(is); ZipEntry entry = zis.getNextEntry(); while (entry != null) { if (entry.getName().endsWith(“.xml”)) { // READ THE STREAM } entry = zis.getNextEntry(); } } 有问题的部分是“// READ THE STREAM”。 我有一个工作解决方案,它包括创建一个ByteArrayInputStream,并用它提供我的解析器。 但它使用缓冲区,对于大文件,我得到一个OutOfMemoryError。 这是代码,如果有人仍然感兴趣: int count; byte buffer[] = new byte[2048]; ByteArrayOutputStream out = new […]

如何使用ZipOutputStream创建压缩的Zip存档,以便ZipEntry的方法getSize()返回正确的大小?

考虑将单个文件test_file.pdf放入zip archive test.zip的代码示例,然后阅读此存档: import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class Main { public static void main(String[] args) { File infile = new File(“test_file.pdf”); try ( FileInputStream fis = new FileInputStream(infile); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(“test.zip”)); ) { int bytesRead; byte[] buffer = new byte[1024]; ZipEntry entry = new ZipEntry(“data”); entry.setSize(infile.length()); zos.putNextEntry(entry); […]

来自ZipInputStream的ZipEntry的getInputStream(不使用ZipFile类)

如何在不使用ZipFile类的情况下从ZipInputStream获取ZipEntry的InputStream ?

从ZipInputStream读取到ByteArrayOutputStream

我试图从java.util.zip.ZipInputStream读取一个文件,并将其复制到java.io.ByteArrayOutputStream (这样我就可以创建一个java.io.ByteArrayInputStream并将其交给第三方库,将最终关闭流,我不希望我的ZipInputStream关闭)。 我可能在这里遗漏了一些基本内容,但我从未在这里输入while循环: ByteArrayOutputStream streamBuilder = new ByteArrayOutputStream(); int bytesRead; byte[] tempBuffer = new byte[8192*2]; try { while ((bytesRead = zipStream.read(tempBuffer)) != -1) { streamBuilder.write(tempBuffer, 0, bytesRead); } } catch (IOException e) { // … } 我错过了哪些可以让我复制流? 编辑: 我之前应该提到过,这个ZipInputStream不是来自文件,所以我认为我不能使用ZipFile 。 它来自通过servlet上传的文件。 此外,在获取此代码片段之前,我已经在ZipInputStream上调用了getNextEntry() 。 如果我不尝试将文件复制到另一个InputStream (通过上面提到的OutputStream ),并且只是将ZipInputStream传递给我的第三方库,那么库会关闭流,而我无法做更多的事情,比如处理流中的剩余文件。