Package org.apache.tomcat

## Interface Jar

- All Superinterfaces:
    `java.lang.AutoCloseable`
  All Known Implementing Classes:
    `AbstractInputStreamJar`, `JarFileUrlJar`, `JarFileUrlNestedJar`, `ReferenceCountedJar`, `UrlJar`

      public interface Jar
      extends java.lang.AutoCloseable

  Provides an abstraction for use by the various classes that need to scan JARs. The classes provided by the JRE for accessing JARs (`JarFile` and `JarInputStream`) have significantly different performance characteristics depending on the form of the URL used to access the JAR. For file based JAR `URL`s, `JarFile` is faster but for non-file based `URL`s, `JarFile` creates a copy of the JAR in the temporary directory so `JarInputStream` is faster.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` | Close any resources associated with this JAR.
    `boolean` | `entryExists​(java.lang.String name)` | Deprecated. Unused.
    `boolean` | `exists​(java.lang.String name)` | Determine if the given resource in present in the JAR.
    `java.io.InputStream` | `getEntryInputStream()` | Obtains the input stream for the current entry.
    `java.lang.String` | `getEntryName()` | Obtains the name of the current entry.
    `java.io.InputStream` | `getInputStream​(java.lang.String name)` | Obtain an `InputStream` for a given entry in a JAR.
    `java.net.URL` | `getJarFileURL()` |
    `long` | `getLastModified​(java.lang.String name)` | Obtain the last modified time for the given resource in the JAR.
    `java.util.jar.Manifest` | `getManifest()` | Obtain the manifest for the JAR file.
    `java.lang.String` | `getURL​(java.lang.String entry)` | Obtain, in String form, the URL for an entry in this JAR.
    `void` | `nextEntry()` | Moves the internal pointer to the next entry in the JAR.
    `void` | `reset()` | Resets the internal pointer used to track JAR entries to the beginning of the JAR.

- - ### Method Detail

    - #### getJarFileURL

          java.net.URL getJarFileURL()

      Returns:
        The URL for accessing the JAR file.

    - #### entryExists

          @Deprecated
          boolean entryExists​(java.lang.String name)
                       throws java.io.IOException

      Deprecated.
      Unused. This will be removed in Tomcat 9 onwards.
      Determines if a specific entry exists within the JAR.
      Parameters:
        `name` - Entry to look for
      Returns:
        Implementations will always return `false`
      Throws:
        `java.io.IOException` - if an I/O error occurs while processing the JAR file entries

    - #### getInputStream

          java.io.InputStream getInputStream​(java.lang.String name)
                                      throws java.io.IOException

      Obtain an `InputStream` for a given entry in a JAR. The caller is responsible for closing the stream.
      Parameters:
        `name` - Entry to obtain an `InputStream` for
      Returns:
        An `InputStream` for the specified entry or null if the entry does not exist
      Throws:
        `java.io.IOException` - if an I/O error occurs while processing the JAR file

    - #### getLastModified

          long getLastModified​(java.lang.String name)
                        throws java.io.IOException

      Obtain the last modified time for the given resource in the JAR.
      Parameters:
        `name` - Entry to obtain the modification time for
      Returns:
        The time (in the same format as `System.currentTimeMillis()` that the resource was last modified. Returns -1 if the entry does not exist
      Throws:
        `java.io.IOException` - if an I/O error occurs while processing the JAR file

    - #### exists

          boolean exists​(java.lang.String name)
                  throws java.io.IOException

      Determine if the given resource in present in the JAR.
      Parameters:
        `name` - Entry to look for
      Returns:
        `true` if the entry is present in the JAR, otherwise `false`
      Throws:
        `java.io.IOException` - if an I/O error occurs while processing the JAR file

    - #### close

          void close()

      Close any resources associated with this JAR.
      Specified by:
        `close` in interface `java.lang.AutoCloseable`

    - #### nextEntry

          void nextEntry()

      Moves the internal pointer to the next entry in the JAR.

    - #### getEntryName

          java.lang.String getEntryName()

      Obtains the name of the current entry.
      Returns:
        The entry name

    - #### getEntryInputStream

          java.io.InputStream getEntryInputStream()
                                           throws java.io.IOException

      Obtains the input stream for the current entry.
      Returns:
        The input stream
      Throws:
        `java.io.IOException` - If the stream cannot be obtained

    - #### getURL

          java.lang.String getURL​(java.lang.String entry)

      Obtain, in String form, the URL for an entry in this JAR. Note that for JARs nested in WAR files, the Tomcat specific war:file:... form will not be used, rather the jar:jar:file:... form (that the JRE does not understand will be used). Note that this means that any code using these URLs will need to understand the jar:jar:file:... form and use the `JarFactory` to ensure resources are accessed correctly.
      Parameters:
        `entry` - The entry to generate the URL for
      Returns:
        a URL for the specified entry in the JAR

    - #### getManifest

          java.util.jar.Manifest getManifest()
                                      throws java.io.IOException

      Obtain the manifest for the JAR file.
      Returns:
        The manifest for this JAR file.
      Throws:
        `java.io.IOException` - If an I/O error occurs trying to obtain the manifest

    - #### reset

          void reset()
              throws java.io.IOException

      Resets the internal pointer used to track JAR entries to the beginning of the JAR.
      Throws:
        `java.io.IOException` - If the pointer cannot be reset