ZipArchiveEntry
Date: 2017-02-08

org.apache.commons.compress.archivers.zip

## Class ZipArchiveEntry

- java.lang.Object
- - java.util.zip.ZipEntry
  - - org.apache.commons.compress.archivers.zip.ZipArchiveEntry

- All Implemented Interfaces:
    java.lang.Cloneable, ArchiveEntry
  Direct Known Subclasses:
    JarArchiveEntry

      public class ZipArchiveEntry
      extends java.util.zip.ZipEntry
      implements ArchiveEntry

  Extension that adds better handling of extra fields and provides access to the internal and external file attributes.

  The extra data is expected to follow the recommendation of APPNOTE.TXT:

  - the extra byte array consists of a sequence of extra fields
  - each extra fields starts by a two byte header id followed by a two byte sequence holding the length of the remainder of data.

  Any extra data that cannot be parsed by the rules above will be consumed as "unparseable" extra data and treated differently by the methods of this class. Versions prior to Apache Commons Compress 1.1 would have thrown an exception if any attempt was made to read or write extra data not conforming to the recommendation.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `CENATT`
    `static int` | `CENATX`
    `static int` | `CENCOM`
    `static int` | `CENCRC`
    `static int` | `CENDSK`
    `static int` | `CENEXT`
    `static int` | `CENFLG`
    `static int` | `CENHDR`
    `static int` | `CENHOW`
    `static int` | `CENLEN`
    `static int` | `CENNAM`
    `static int` | `CENOFF`
    `static long` | `CENSIG`
    `static int` | `CENSIZ`
    `static int` | `CENTIM`
    `static int` | `CENVEM`
    `static int` | `CENVER`
    `static int` | `CRC_UNKNOWN`
    `static int` | `ENDCOM`
    `static int` | `ENDHDR`
    `static int` | `ENDOFF`
    `static long` | `ENDSIG`
    `static int` | `ENDSIZ`
    `static int` | `ENDSUB`
    `static int` | `ENDTOT`
    `static int` | `EXTCRC`
    `static int` | `EXTHDR`
    `static int` | `EXTLEN`
    `static long` | `EXTSIG`
    `static int` | `EXTSIZ`
    `static int` | `LOCCRC`
    `static int` | `LOCEXT`
    `static int` | `LOCFLG`
    `static int` | `LOCHDR`
    `static int` | `LOCHOW`
    `static int` | `LOCLEN`
    `static int` | `LOCNAM`
    `static long` | `LOCSIG`
    `static int` | `LOCSIZ`
    `static int` | `LOCTIM`
    `static int` | `LOCVER`
    `static int` | `PLATFORM_FAT`
    `static int` | `PLATFORM_UNIX`

    - ### Fields inherited from class java.util.zip.ZipEntry

      `DEFLATED, STORED`

    - ### Fields inherited from interface org.apache.commons.compress.archivers.ArchiveEntry

      `SIZE_UNKNOWN`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `ZipArchiveEntry()`
    `` | `ZipArchiveEntry(java.io.File inputFile, java.lang.String entryName)` Creates a new zip entry taking some information from the given file and using the provided name.
    `` | `ZipArchiveEntry(java.lang.String name)` Creates a new zip entry with the specified name.
    `` | `ZipArchiveEntry(ZipArchiveEntry entry)` Creates a new zip entry with fields taken from the specified zip entry.
    `` | `ZipArchiveEntry(java.util.zip.ZipEntry entry)` Creates a new zip entry with fields taken from the specified zip entry.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addAsFirstExtraField(ZipExtraField ze)` Adds an extra field - replacing an already present extra field of the same type.
    `void` | `addExtraField(ZipExtraField ze)` Adds an extra field - replacing an already present extra field of the same type.
    `java.lang.Object` | `clone()` Overwrite clone.
    `boolean` | `equals(java.lang.Object obj)`
    `byte[]` | `getCentralDirectoryExtra()` Retrieves the extra data for the central directory.
    `long` | `getExternalAttributes()` Retrieves the external file attributes.
    `ZipExtraField` | `getExtraField(ZipShort type)` Looks up an extra field by its header id.
    `ZipExtraField[]` | `getExtraFields()` Retrieves all extra fields that have been parsed successfully.
    `ZipExtraField[]` | `getExtraFields(boolean includeUnparseable)` Retrieves extra fields.
    `GeneralPurposeBit` | `getGeneralPurposeBit()` The "general purpose bit" field.
    `int` | `getInternalAttributes()` Retrieves the internal file attributes.
    `java.util.Date` | `getLastModifiedDate()` Wraps `ZipEntry.getTime()` with a `Date` as the entry's last modified date.
    `byte[]` | `getLocalFileDataExtra()` Retrieves the extra data for the local file data.
    `int` | `getMethod()` Returns the compression method of this entry, or -1 if the compression method has not been specified.
    `java.lang.String` | `getName()` Get the name of the entry.
    `int` | `getPlatform()` Platform specification to put into the "version made by" part of the central file header.
    `int` | `getRawFlag()` The content of the flags field.
    `byte[]` | `getRawName()` Returns the raw bytes that made up the name before it has been converted using the configured or guessed encoding.
    `long` | `getSize()` Gets the uncompressed size of the entry data.
    `int` | `getUnixMode()` Unix permission.
    `UnparseableExtraFieldData` | `getUnparseableExtraFieldData()` Looks up extra field data that couldn't be parsed correctly.
    `int` | `getVersionMadeBy()` The "version made by" field.
    `int` | `getVersionRequired()` The "version required to expand" field.
    `int` | `hashCode()` Get the hashCode of the entry.
    `boolean` | `isDirectory()` Is this entry a directory?
    `boolean` | `isUnixSymlink()` Returns true if this entry represents a unix symlink, in which case the entry's content contains the target path for the symlink.
    `void` | `removeExtraField(ZipShort type)` Remove an extra field.
    `void` | `removeUnparseableExtraFieldData()` Removes unparseable extra field data.
    `void` | `setCentralDirectoryExtra(byte[] b)` Sets the central directory part of extra fields.
    `void` | `setExternalAttributes(long value)` Sets the external file attributes.
    `protected void` | `setExtra()` Unfortunately `java.util.zip.ZipOutputStream` seems to access the extra data directly, so overriding getExtra doesn't help - we need to modify super's data directly.
    `void` | `setExtra(byte[] extra)` Parses the given bytes as extra field data and consumes any unparseable data as an `UnparseableExtraFieldData` instance.
    `void` | `setExtraFields(ZipExtraField[] fields)` Replaces all currently attached extra fields with the new array.
    `void` | `setGeneralPurposeBit(GeneralPurposeBit b)` The "general purpose bit" field.
    `void` | `setInternalAttributes(int value)` Sets the internal file attributes.
    `void` | `setMethod(int method)` Sets the compression method of this entry.
    `protected void` | `setName(java.lang.String name)` Set the name of the entry.
    `protected void` | `setName(java.lang.String name, byte[] rawName)` Sets the name using the raw bytes and the string created from it by guessing or using the configured encoding.
    `protected void` | `setPlatform(int platform)` Set the platform (UNIX or FAT).
    `void` | `setRawFlag(int rawFlag)` Sets the content of the flags field.
    `void` | `setSize(long size)` Sets the uncompressed size of the entry data.
    `void` | `setUnixMode(int mode)` Sets Unix permissions in a way that is understood by Info-Zip's unzip command.
    `void` | `setVersionMadeBy(int versionMadeBy)` Sets the "version made by" field.
    `void` | `setVersionRequired(int versionRequired)` Sets the "version required to expand" field.

    - ### Methods inherited from class java.util.zip.ZipEntry

      `getComment, getCompressedSize, getCrc, getExtra, getTime, setComment, setCompressedSize, setCrc, setTime, toString`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### PLATFORM_UNIX

          public static final int PLATFORM_UNIX

      See Also:
        Constant Field Values

    - #### PLATFORM_FAT

          public static final int PLATFORM_FAT

      See Also:
        Constant Field Values

    - #### CRC_UNKNOWN

          public static final int CRC_UNKNOWN

      See Also:
        Constant Field Values

    - #### LOCSIG

          public static final long LOCSIG

      See Also:
        Constant Field Values

    - #### EXTSIG

          public static final long EXTSIG

      See Also:
        Constant Field Values

    - #### CENSIG

          public static final long CENSIG

      See Also:
        Constant Field Values

    - #### ENDSIG

          public static final long ENDSIG

      See Also:
        Constant Field Values

    - #### LOCHDR

          public static final int LOCHDR

      See Also:
        Constant Field Values

    - #### EXTHDR

          public static final int EXTHDR

      See Also:
        Constant Field Values

    - #### CENHDR

          public static final int CENHDR

      See Also:
        Constant Field Values

    - #### ENDHDR

          public static final int ENDHDR

      See Also:
        Constant Field Values

    - #### LOCVER

          public static final int LOCVER

      See Also:
        Constant Field Values

    - #### LOCFLG

          public static final int LOCFLG

      See Also:
        Constant Field Values

    - #### LOCHOW

          public static final int LOCHOW

      See Also:
        Constant Field Values

    - #### LOCTIM

          public static final int LOCTIM

      See Also:
        Constant Field Values

    - #### LOCCRC

          public static final int LOCCRC

      See Also:
        Constant Field Values

    - #### LOCSIZ

          public static final int LOCSIZ

      See Also:
        Constant Field Values

    - #### LOCLEN

          public static final int LOCLEN

      See Also:
        Constant Field Values

    - #### LOCNAM

          public static final int LOCNAM

      See Also:
        Constant Field Values

    - #### LOCEXT

          public static final int LOCEXT

      See Also:
        Constant Field Values

    - #### EXTCRC

          public static final int EXTCRC

      See Also:
        Constant Field Values

    - #### EXTSIZ

          public static final int EXTSIZ

      See Also:
        Constant Field Values

    - #### EXTLEN

          public static final int EXTLEN

      See Also:
        Constant Field Values

    - #### CENVEM

          public static final int CENVEM

      See Also:
        Constant Field Values

    - #### CENVER

          public static final int CENVER

      See Also:
        Constant Field Values

    - #### CENFLG

          public static final int CENFLG

      See Also:
        Constant Field Values

    - #### CENHOW

          public static final int CENHOW

      See Also:
        Constant Field Values

    - #### CENTIM

          public static final int CENTIM

      See Also:
        Constant Field Values

    - #### CENCRC

          public static final int CENCRC

      See Also:
        Constant Field Values

    - #### CENSIZ

          public static final int CENSIZ

      See Also:
        Constant Field Values

    - #### CENLEN

          public static final int CENLEN

      See Also:
        Constant Field Values

    - #### CENNAM

          public static final int CENNAM

      See Also:
        Constant Field Values

    - #### CENEXT

          public static final int CENEXT

      See Also:
        Constant Field Values

    - #### CENCOM

          public static final int CENCOM

      See Also:
        Constant Field Values

    - #### CENDSK

          public static final int CENDSK

      See Also:
        Constant Field Values

    - #### CENATT

          public static final int CENATT

      See Also:
        Constant Field Values

    - #### CENATX

          public static final int CENATX

      See Also:
        Constant Field Values

    - #### CENOFF

          public static final int CENOFF

      See Also:
        Constant Field Values

    - #### ENDSUB

          public static final int ENDSUB

      See Also:
        Constant Field Values

    - #### ENDTOT

          public static final int ENDTOT

      See Also:
        Constant Field Values

    - #### ENDSIZ

          public static final int ENDSIZ

      See Also:
        Constant Field Values

    - #### ENDOFF

          public static final int ENDOFF

      See Also:
        Constant Field Values

    - #### ENDCOM

          public static final int ENDCOM

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ZipArchiveEntry

          public ZipArchiveEntry(java.lang.String name)

      Creates a new zip entry with the specified name.

      Assumes the entry represents a directory if and only if the name ends with a forward slash "/".

      Parameters:
        `name` - the name of the entry

    - #### ZipArchiveEntry

          public ZipArchiveEntry(java.util.zip.ZipEntry entry)
                          throws java.util.zip.ZipException

      Creates a new zip entry with fields taken from the specified zip entry.

      Assumes the entry represents a directory if and only if the name ends with a forward slash "/".

      Parameters:
        `entry` - the entry to get fields from
      Throws:
        `java.util.zip.ZipException` - on error

    - #### ZipArchiveEntry

          public ZipArchiveEntry(ZipArchiveEntry entry)
                          throws java.util.zip.ZipException

      Creates a new zip entry with fields taken from the specified zip entry.

      Assumes the entry represents a directory if and only if the name ends with a forward slash "/".

      Parameters:
        `entry` - the entry to get fields from
      Throws:
        `java.util.zip.ZipException` - on error

    - #### ZipArchiveEntry

          protected ZipArchiveEntry()

    - #### ZipArchiveEntry

          public ZipArchiveEntry(java.io.File inputFile,
                         java.lang.String entryName)

      Creates a new zip entry taking some information from the given file and using the provided name.

      The name will be adjusted to end with a forward slash "/" if the file is a directory. If the file is not a directory a potential trailing forward slash will be stripped from the entry name.

      Parameters:
        `inputFile` - file to create the entry from
        `entryName` - name of the entry

  - ### Method Detail

    - #### clone

          public java.lang.Object clone()

      Overwrite clone.
      Overrides:
        `clone` in class `java.util.zip.ZipEntry`
      Returns:
        a cloned copy of this ZipArchiveEntry

    - #### getMethod

          public int getMethod()

      Returns the compression method of this entry, or -1 if the compression method has not been specified.
      Overrides:
        `getMethod` in class `java.util.zip.ZipEntry`
      Returns:
        compression method
      Since:
        1.1

    - #### setMethod

          public void setMethod(int method)

      Sets the compression method of this entry.
      Overrides:
        `setMethod` in class `java.util.zip.ZipEntry`
      Parameters:
        `method` - compression method
      Since:
        1.1

    - #### getInternalAttributes

          public int getInternalAttributes()

      Retrieves the internal file attributes.

      Note: `ZipArchiveInputStream` is unable to fill this field, you must use `ZipFile` if you want to read entries using this attribute.

      Returns:
        the internal file attributes

    - #### setInternalAttributes

          public void setInternalAttributes(int value)

      Sets the internal file attributes.
      Parameters:
        `value` - an `int` value

    - #### getExternalAttributes

          public long getExternalAttributes()

      Retrieves the external file attributes.

      Note: `ZipArchiveInputStream` is unable to fill this field, you must use `ZipFile` if you want to read entries using this attribute.

      Returns:
        the external file attributes

    - #### setExternalAttributes

          public void setExternalAttributes(long value)

      Sets the external file attributes.
      Parameters:
        `value` - an `long` value

    - #### setUnixMode

          public void setUnixMode(int mode)

      Sets Unix permissions in a way that is understood by Info-Zip's unzip command.
      Parameters:
        `mode` - an `int` value

    - #### getUnixMode

          public int getUnixMode()

      Unix permission.
      Returns:
        the unix permissions

    - #### isUnixSymlink

          public boolean isUnixSymlink()

      Returns true if this entry represents a unix symlink, in which case the entry's content contains the target path for the symlink.
      Returns:
        true if the entry represents a unix symlink, false otherwise.
      Since:
        1.5

    - #### getPlatform

          public int getPlatform()

      Platform specification to put into the "version made by" part of the central file header.
      Returns:
        PLATFORM_FAT unless `setUnixMode` has been called, in which case PLATFORM_UNIX will be returned.

    - #### setPlatform

          protected void setPlatform(int platform)

      Set the platform (UNIX or FAT).
      Parameters:
        `platform` - an `int` value - 0 is FAT, 3 is UNIX

    - #### setExtraFields

          public void setExtraFields(ZipExtraField[] fields)

      Replaces all currently attached extra fields with the new array.
      Parameters:
        `fields` - an array of extra fields

    - #### getExtraFields

          public ZipExtraField[] getExtraFields()

      Retrieves all extra fields that have been parsed successfully.

      Note: The set of extra fields may be incomplete when `ZipArchiveInputStream` has been used as some extra fields use the central directory to store additional information.

      Returns:
        an array of the extra fields

    - #### getExtraFields

          public ZipExtraField[] getExtraFields(boolean includeUnparseable)

      Retrieves extra fields.
      Parameters:
        `includeUnparseable` - whether to also return unparseable extra fields as `UnparseableExtraFieldData` if such data exists.
      Returns:
        an array of the extra fields
      Since:
        1.1

    - #### addExtraField

          public void addExtraField(ZipExtraField ze)

      Adds an extra field - replacing an already present extra field of the same type.

      If no extra field of the same type exists, the field will be added as last field.

      Parameters:
        `ze` - an extra field

    - #### addAsFirstExtraField

          public void addAsFirstExtraField(ZipExtraField ze)

      Adds an extra field - replacing an already present extra field of the same type.

      The new extra field will be the first one.

      Parameters:
        `ze` - an extra field

    - #### removeExtraField

          public void removeExtraField(ZipShort type)

      Remove an extra field.
      Parameters:
        `type` - the type of extra field to remove

    - #### removeUnparseableExtraFieldData

          public void removeUnparseableExtraFieldData()

      Removes unparseable extra field data.
      Since:
        1.1

    - #### getExtraField

          public ZipExtraField getExtraField(ZipShort type)

      Looks up an extra field by its header id.
      Parameters:
        `type` - the header id
      Returns:
        null if no such field exists.

    - #### getUnparseableExtraFieldData

          public UnparseableExtraFieldData getUnparseableExtraFieldData()

      Looks up extra field data that couldn't be parsed correctly.
      Returns:
        null if no such field exists.
      Since:
        1.1

    - #### setExtra

          public void setExtra(byte[] extra)
                        throws java.lang.RuntimeException

      Parses the given bytes as extra field data and consumes any unparseable data as an `UnparseableExtraFieldData` instance.
      Overrides:
        `setExtra` in class `java.util.zip.ZipEntry`
      Parameters:
        `extra` - an array of bytes to be parsed into extra fields
      Throws:
        `java.lang.RuntimeException` - if the bytes cannot be parsed
        `java.lang.RuntimeException` - on error

    - #### setExtra

          protected void setExtra()

      Unfortunately `java.util.zip.ZipOutputStream` seems to access the extra data directly, so overriding getExtra doesn't help - we need to modify super's data directly.

    - #### setCentralDirectoryExtra

          public void setCentralDirectoryExtra(byte[] b)

      Sets the central directory part of extra fields.
      Parameters:
        `b` - an array of bytes to be parsed into extra fields

    - #### getLocalFileDataExtra

          public byte[] getLocalFileDataExtra()

      Retrieves the extra data for the local file data.
      Returns:
        the extra data for local file

    - #### getCentralDirectoryExtra

          public byte[] getCentralDirectoryExtra()

      Retrieves the extra data for the central directory.
      Returns:
        the central directory extra data

    - #### getName

          public java.lang.String getName()

      Get the name of the entry.
      Specified by:
        `getName` in interface `ArchiveEntry`
      Overrides:
        `getName` in class `java.util.zip.ZipEntry`
      Returns:
        the entry name

    - #### isDirectory

          public boolean isDirectory()

      Is this entry a directory?
      Specified by:
        `isDirectory` in interface `ArchiveEntry`
      Overrides:
        `isDirectory` in class `java.util.zip.ZipEntry`
      Returns:
        true if the entry is a directory

    - #### setName

          protected void setName(java.lang.String name)

      Set the name of the entry.
      Parameters:
        `name` - the name to use

    - #### getSize

          public long getSize()

      Gets the uncompressed size of the entry data.

      Note: `ZipArchiveInputStream` may create entries that return `SIZE_UNKNOWN` as long as the entry hasn't been read completely.

      Specified by:
        `getSize` in interface `ArchiveEntry`
      Overrides:
        `getSize` in class `java.util.zip.ZipEntry`
      Returns:
        the entry size

    - #### setSize

          public void setSize(long size)

      Sets the uncompressed size of the entry data.
      Overrides:
        `setSize` in class `java.util.zip.ZipEntry`
      Parameters:
        `size` - the uncompressed size in bytes
      Throws:
        `java.lang.IllegalArgumentException` - if the specified size is less than 0

    - #### setName

          protected void setName(java.lang.String name,
                     byte[] rawName)

      Sets the name using the raw bytes and the string created from it by guessing or using the configured encoding.
      Parameters:
        `name` - the name to use created from the raw bytes using the guessed or configured encoding
        `rawName` - the bytes originally read as name from the archive
      Since:
        1.2

    - #### getRawName

          public byte[] getRawName()

      Returns the raw bytes that made up the name before it has been converted using the configured or guessed encoding.

      This method will return null if this instance has not been read from an archive.

      Returns:
        the raw name bytes
      Since:
        1.2

    - #### hashCode

          public int hashCode()

      Get the hashCode of the entry. This uses the name as the hashcode.
      Overrides:
        `hashCode` in class `java.util.zip.ZipEntry`
      Returns:
        a hashcode.

    - #### getGeneralPurposeBit

          public GeneralPurposeBit getGeneralPurposeBit()

      The "general purpose bit" field.
      Returns:
        the general purpose bit
      Since:
        1.1

    - #### setGeneralPurposeBit

          public void setGeneralPurposeBit(GeneralPurposeBit b)

      The "general purpose bit" field.
      Parameters:
        `b` - the general purpose bit
      Since:
        1.1

    - #### getLastModifiedDate

          public java.util.Date getLastModifiedDate()

      Wraps `ZipEntry.getTime()` with a `Date` as the entry's last modified date.

      Changes to the implementation of `ZipEntry.getTime()` leak through and the returned value may depend on your local time zone as well as your version of Java.

      Specified by:
        `getLastModifiedDate` in interface `ArchiveEntry`
      Returns:
        the last modified date of this entry.

    - #### equals

          public boolean equals(java.lang.Object obj)

      Overrides:
        `equals` in class `java.lang.Object`

    - #### setVersionMadeBy

          public void setVersionMadeBy(int versionMadeBy)

      Sets the "version made by" field.
      Parameters:
        `versionMadeBy` - "version made by" field
      Since:
        1.11

    - #### setVersionRequired

          public void setVersionRequired(int versionRequired)

      Sets the "version required to expand" field.
      Parameters:
        `versionRequired` - "version required to expand" field
      Since:
        1.11

    - #### getVersionRequired

          public int getVersionRequired()

      The "version required to expand" field.
      Returns:
        "version required to expand" field
      Since:
        1.11

    - #### getVersionMadeBy

          public int getVersionMadeBy()

      The "version made by" field.
      Returns:
        "version made by" field
      Since:
        1.11

    - #### getRawFlag

          public int getRawFlag()

      The content of the flags field.
      Returns:
        content of the flags field
      Since:
        1.11

    - #### setRawFlag

          public void setRawFlag(int rawFlag)

      Sets the content of the flags field.
      Parameters:
        `rawFlag` - content of the flags field
      Since:
        1.11