Class ZipEntry

  • All Implemented Interfaces:
    java.lang.Cloneable

    public class ZipEntry
    extends java.util.zip.ZipEntry
    implements java.lang.Cloneable
    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. Older versions would have thrown an exception if any attempt was made to read or write extra data not conforming to the recommendation.

    • Constructor Detail

      • ZipEntry

        public ZipEntry​(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
        Since:
        1.1
      • ZipEntry

        public ZipEntry​(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
        Since:
        1.1
      • ZipEntry

        public ZipEntry​(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
        Since:
        1.1
      • ZipEntry

        protected ZipEntry()
        Since:
        1.9
      • ZipEntry

        public ZipEntry​(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
        entryName - String
    • Method Detail

      • clone

        public java.lang.Object clone()
        Overwrite clone.
        Overrides:
        clone in class java.util.zip.ZipEntry
        Returns:
        a cloned copy of this ZipEntry
        Since:
        1.1
      • 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
      • 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
      • getInternalAttributes

        public int getInternalAttributes()
        Retrieves the internal file attributes.
        Returns:
        the internal file attributes
        Since:
        1.1
      • setInternalAttributes

        public void setInternalAttributes​(int value)
        Sets the internal file attributes.
        Parameters:
        value - an int value
        Since:
        1.1
      • getExternalAttributes

        public long getExternalAttributes()
        Retrieves the external file attributes.
        Returns:
        the external file attributes
        Since:
        1.1
      • setExternalAttributes

        public void setExternalAttributes​(long value)
        Sets the external file attributes.
        Parameters:
        value - an long value
        Since:
        1.1
      • 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
        Since:
        Ant 1.5.2
      • getUnixMode

        public int getUnixMode()
        Unix permission.
        Returns:
        the unix permissions
        Since:
        Ant 1.6
      • 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.
        Since:
        Ant 1.5.2
      • setPlatform

        protected void setPlatform​(int platform)
        Set the platform (UNIX or FAT).
        Parameters:
        platform - an int value - 0 is FAT, 3 is UNIX
        Since:
        1.9
      • setExtraFields

        public void setExtraFields​(ZipExtraField[] fields)
        Replaces all currently attached extra fields with the new array.
        Parameters:
        fields - an array of extra fields
        Since:
        1.1
      • getExtraFields

        public ZipExtraField[] getExtraFields()
        Retrieves all extra fields that have been parsed successfully.
        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
        Since:
        1.1
      • 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
        Since:
        1.1
      • removeExtraField

        public void removeExtraField​(ZipShort type)
        Remove an extra field.
        Parameters:
        type - the type of extra field to remove
        Since:
        1.1
      • removeUnparseableExtraFieldData

        public void removeUnparseableExtraFieldData()
        Removes unparseable extra field data.
      • getExtraField

        public ZipExtraField getExtraField​(ZipShort type)
        Looks up an extra field by its header id.
        Parameters:
        type - ZipShort
        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.
      • 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
        Since:
        1.1
      • 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.
        Since:
        1.1
      • setCentralDirectoryExtra

        public void setCentralDirectoryExtra​(byte[] b)
        Sets the central directory part of extra fields.
        Parameters:
        b - boolean
      • getLocalFileDataExtra

        public byte[] getLocalFileDataExtra()
        Retrieves the extra data for the local file data.
        Returns:
        the extra data for local file
        Since:
        1.1
      • getCentralDirectoryExtra

        public byte[] getCentralDirectoryExtra()
        Retrieves the extra data for the central directory.
        Returns:
        the central directory extra data
        Since:
        1.1
      • setComprSize

        @Deprecated
        public void setComprSize​(long size)
        Deprecated.
        since 1.7. Use setCompressedSize directly.
        Make this class work in JDK 1.1 like a 1.2 class.

        This either stores the size for later usage or invokes setCompressedSize via reflection.

        Parameters:
        size - the size to use
        Since:
        1.2
      • getName

        public java.lang.String getName()
        Get the name of the entry.
        Overrides:
        getName in class java.util.zip.ZipEntry
        Returns:
        the entry name
        Since:
        1.9
      • isDirectory

        public boolean isDirectory()
        Is this entry a directory?
        Overrides:
        isDirectory in class java.util.zip.ZipEntry
        Returns:
        true if the entry is a directory
        Since:
        1.10
      • 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.
        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
      • 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:
        byte[]
      • 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.
        Since:
        Ant 1.7
      • getGeneralPurposeBit

        public GeneralPurposeBit getGeneralPurposeBit()
        The "general purpose bit" field.
        Returns:
        GeneralPurposeBit
      • setGeneralPurposeBit

        public void setGeneralPurposeBit​(GeneralPurposeBit b)
        The "general purpose bit" field.
        Parameters:
        b - GeneralPurposeBit
      • getLastModifiedDate

        public java.util.Date getLastModifiedDate()
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object