【问题标题】:The ZipInputStream can't read all information of zip fileZipInputStream 无法读取 zip 文件的所有信息
【发布时间】:2012-04-10 09:45:43
【问题描述】:

我使用ZipInputStream 编写了一些代码,但它有问题。

ZipInputStream zin=null;
zin=new ZipInputStream(new BufferedInputStream(
    new FileInputStream("e:/testzip.zip")));
ZipEntry ze;
while((ze=zin.getNextEntry())!=null) {

     System.out.println("readfile"+ze.getName());

     int c=0;

     while((c=zin.read())>0) {
       System.out.write(c);
     }
 }
 zin.close();

testzip.zip 中有 3 个文本文件。也就是说,正确的输出应该是三个文件名及其内容。但是,我的输出是 3 个文件名和它们的 2 个内容。为什么只有 2 个内容,而不是 3 个?

【问题讨论】:

  • 您可能不是以英语为母语的人,但了解“阅读”和“写作”之间的区别很重要。 (不能写入输入流,只能从中读取。) 2) 请注意输入帖子,使用消息发布/编辑表单顶部的代码格式化按钮,并删除无关的空行代码贴子。 -- 还有,欢迎来到 SO!
  • 欢迎您进行编辑以及我可以提供的任何提示。 :)
  • 我编辑了我的答案并给你写了一个解决方案。

标签: java zipinputstream


【解决方案1】:

我制作了一个包含 3 个文本文件的 zip;它们是文本文件这一事实对于以下代码的工作很重要。我阅读了所有条目并写出了它的名称和内容:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class Main {

    public static void main(String[] args) throws Exception {
        ZipFile zipFile = new ZipFile("D:\\zip.zip");
        Enumeration<? extends ZipEntry> entries = zipFile.entries();
        while(entries.hasMoreElements()) {
            ZipEntry zipEntry = entries.nextElement();
            System.out.println(zipEntry.getName());
            BufferedReader bufferedeReader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry)));
            String line = bufferedeReader.readLine();
            while(line != null) {
                System.out.println(line);
                line = bufferedeReader.readLine();
            }
            bufferedeReader.close();
        }
        zipFile.close();
    }

}

【讨论】:

  • 你确定第三个文件不是空的吗?
  • 是的。我确定。我检查 zip 文件超过 5 次
  • @WillYu 不过建议的修改是正确的。您的原始代码会将输入中的 NUL 字节视为文件结尾,这绝对是错误的。
【解决方案2】:

对于这个用例,ZipFile 似乎更合适,因为它可以为您提供 zip 文件的目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多