Package java.util.zip

Class ZipFile

java.lang.Object
java.util.zip.ZipFile
All Implemented Interfaces:
Closeable, AutoCloseable
Direct Known Subclasses:
JarFile

public class ZipFile
extends Object
implements Closeable
This class provides random read access to a zip file. You pay more to read the zip file's central directory up front (from the constructor), but if you're using getEntry(java.lang.String) to look up multiple files by name, you get the benefit of this index.

If you only want to iterate through all the files (using entries(), you should consider ZipInputStream, which provides stream-like read access to a zip file and has a lower up-front cost because you don't pay to build an in-memory index.

If you want to create a zip file, use ZipOutputStream. There is no API for updating an existing zip file.

  • Field Details

  • Constructor Details

    • ZipFile

      public ZipFile​(File file) throws ZipException, IOException
      Constructs a new ZipFile allowing read access to the contents of the given file.
      Throws:
      ZipException - if a zip error occurs.
      IOException - if an IOException occurs.
    • ZipFile

      public ZipFile​(String name) throws IOException
      Constructs a new ZipFile allowing read access to the contents of the given file.
      Throws:
      IOException - if an IOException occurs.
    • ZipFile

      public ZipFile​(File file, int mode) throws IOException
      Constructs a new ZipFile allowing access to the given file. The mode must be either OPEN_READ or OPEN_READ|OPEN_DELETE.

      If the OPEN_DELETE flag is supplied, the file will be deleted at or before the time that the ZipFile is closed (the contents will remain accessible until this ZipFile is closed); it also calls File.deleteOnExit.

      Throws:
      IOException - if an IOException occurs.
  • Method Details

    • finalize

      protected void finalize() throws IOException
      Description copied from class: Object
      Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.

      Note that objects that override finalize are significantly more expensive than objects that don't. Finalizers may be run a long time after the object is no longer reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup. Note also that finalizers are run on a single VM-wide finalizer thread, so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary for a class that has a native peer and needs to call a native method to destroy that peer. Even then, it's better to provide an explicit close method (and implement Closeable), and insist that callers manually dispose of instances. This works well for something like files, but less well for something like a BigInteger where typical calling code would have to deal with lots of temporaries. Unfortunately, code that creates lots of temporaries is the worst kind of code from the point of view of the single finalizer thread.

      If you must use finalizers, consider at least providing your own ReferenceQueue and having your own thread process that queue.

      Unlike constructors, finalizers are not automatically chained. You are responsible for calling super.finalize() yourself.

      Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.

      Overrides:
      finalize in class Object
      Throws:
      IOException
    • close

      public void close() throws IOException
      Closes this zip file. This method is idempotent. This method may cause I/O if the zip file needs to be deleted.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException - if an IOException occurs.
    • entries

      public Enumeration<? extends ZipEntry> entries()
      Returns an enumeration of the entries. The entries are listed in the order in which they appear in the zip file.

      If you only need to iterate over the entries in a zip file, and don't need random-access entry lookup by name, you should probably use ZipInputStream instead, to avoid paying to construct the in-memory index.

      Throws:
      IllegalStateException - if this zip file has been closed.
    • getComment

      public String getComment()
      Returns this file's comment, or null if it doesn't have one. See ZipOutputStream.setComment(java.lang.String).
      Throws:
      IllegalStateException - if this zip file has been closed.
      Since:
      1.7
    • getEntry

      public ZipEntry getEntry​(String entryName)
      Returns the zip entry with the given name, or null if there is no such entry.
      Throws:
      IllegalStateException - if this zip file has been closed.
    • getInputStream

      public InputStream getInputStream​(ZipEntry entry) throws IOException
      Returns an input stream on the data of the specified ZipEntry.
      Parameters:
      entry - the ZipEntry.
      Returns:
      an input stream of the data contained in the ZipEntry.
      Throws:
      IOException - if an IOException occurs.
      IllegalStateException - if this zip file has been closed.
    • getName

      public String getName()
      Gets the file name of this ZipFile.
      Returns:
      the file name of this ZipFile.
    • size

      public int size()
      Returns the number of ZipEntries in this ZipFile.
      Returns:
      the number of entries in this file.
      Throws:
      IllegalStateException - if this zip file has been closed.