有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ZipInputStream无法读取zip文件的所有信息

我用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) 个答案

  1. # 1 楼答案

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

    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();
        }
    
    }
    
  2. # 2 楼答案

    对于这个用例,看起来ZipFile可能更合适,因为它可以为您提供zip文件的TOC