Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6599383

Unable to open zip files more than 2GB in size

XMLWordPrintable

    • b50
    • other
    • generic

        OPERATING SYSTEM(S):
        All

        FULL JDK VERSION(S):
        java version "1.6.0_02"
        Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
        Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode)

        DESCRIPTION:

        When JDK 6 is used for unzipping a zip file > 2GB in size, the following exception is thrown:

        java.util.zip.ZipException: error in opening zip file
          at java.util.zip.ZipFile.open(Native Method)
          at java.util.zip.ZipFile.<init>(ZipFile.java:114)
          at java.util.zip.ZipFile.<init>(ZipFile.java:75)
          at UnZip.main(UnZip.java:65)

        Exact steps to reproduce
          1. Create a zip file > 2GB in size.
          2. Write a simple java program to unzip the file using a Java program

        The following testcase was obtained from another sun bug:

        import java.io.*;
        import java.util.*;
        import java.util.zip.*;

        public class unzip
        {
            public static final void copyInputStream (InputStream in,OutputStream out) throws IOException
            {
                byte[] buffer = new byte [1024];
                int len;
                while ((len = in.read(buffer)) >= 0)
                    out.write(buffer, 0, len);
                in.close();
                out.close();
            }
            public static final void main (String[] args)
            {
                Enumeration entries;
                ZipFile zipFile=null;
                if (args.length != 1){
                    System.err.println("Usage: Unzip zipfile");
                    return;
                }
                try{
                 zipFile = new ZipFile(args[0]);
        }catch(IOException ioe){System.out.println("error opening the zipfile");ioe.printStackTrace();}
                 ZipEntry entry=null;
                 entries = zipFile.entries();
                 while (entries.hasMoreElements()){
                        System.out.println("Constructing ZipFile...");
                        entry = ( ZipEntry ) entries.nextElement();
                 }
                 if (entry.isDirectory()){
                 // Assume directories are stored parents first then children
                 System.err.println("Extracting directory: " + entry.getName());
                 // This is not robust, just for demonstration purposes.
                 (new File(entry.getName())).mkdir();
                 //continue;
                 }
                 System.err.println("Extracting file: " + entry.getName());
        try{
        copyInputStream(zipFile.getInputStream(entry),new BufferedOutputStream(new FileOutputStream(entry.getName())));
                 System.out.print("Check memory usage and press 'Enter'...");
        System.in.read();
                 zipFile.close();
                 }catch(IOException ioe){ioe.printStackTrace();}
            
            }
        }

              kevinw Kevin Walls
              elarsen Erik Larsen (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: