Class ZipArchiveEntry
- java.lang.Object
-
- java.util.zip.ZipEntry
-
- org.apache.commons.compress.archivers.zip.ZipArchiveEntry
-
- All Implemented Interfaces:
java.lang.Cloneable
,ArchiveEntry
,EntryStreamOffsets
- Direct Known Subclasses:
JarArchiveEntry
public class ZipArchiveEntry extends java.util.zip.ZipEntry implements ArchiveEntry, EntryStreamOffsets
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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ZipArchiveEntry.CommentSource
Indicates how the comment of this entry has been determined.static class
ZipArchiveEntry.ExtraFieldParsingMode
How to try to parse the extra fields.static class
ZipArchiveEntry.NameSource
Indicates how the name of this entry has been determined.
-
Field Summary
Fields Modifier and Type Field 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 interface org.apache.commons.compress.archivers.ArchiveEntry
SIZE_UNKNOWN
-
Fields inherited from interface org.apache.commons.compress.archivers.EntryStreamOffsets
OFFSET_UNKNOWN
-
-
Constructor Summary
Constructors Constructor Description 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(java.nio.file.Path inputPath, java.lang.String entryName, java.nio.file.LinkOption... options)
Creates a new zip entry taking some information from the given path and using the provided name.ZipArchiveEntry(java.util.zip.ZipEntry entry)
Creates a new zip entry with fields taken from the specified zip entry.ZipArchiveEntry(ZipArchiveEntry entry)
Creates a new zip entry with fields taken from the specified zip entry.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method 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.ZipArchiveEntry.CommentSource
getCommentSource()
The source of the comment field value.long
getDataOffset()
Gets the offset of data stream within the archive file,long
getDiskNumberStart()
The number of the split segment this entry starts at.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.ZipExtraField[]
getExtraFields(ExtraFieldParsingBehavior parsingBehavior)
Retrieves extra fields.GeneralPurposeBit
getGeneralPurposeBit()
The "general purpose bit" field.int
getInternalAttributes()
Retrieves the internal file attributes.java.util.Date
getLastModifiedDate()
WrapsZipEntry.getTime()
with aDate
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.ZipArchiveEntry.NameSource
getNameSource()
The source of the name field value.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
isStreamContiguous()
Indicates whether the stream is contiguous, i.e.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
setAlignment(int alignment)
Sets alignment for this entry.void
setCentralDirectoryExtra(byte[] b)
Sets the central directory part of extra fields.void
setCommentSource(ZipArchiveEntry.CommentSource commentSource)
Sets the source of the comment field value.void
setDiskNumberStart(long diskNumberStart)
The number of the split segment this entry starts at.void
setExternalAttributes(long value)
Sets the external file attributes.void
setExtra(byte[] extra)
Parses the given bytes as extra field data and consumes any unparseable data as anUnparseableExtraFieldData
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.void
setNameSource(ZipArchiveEntry.NameSource nameSource)
Sets the source of the name field value.void
setRawFlag(int rawFlag)
Sets the content of the flags field.void
setSize(long size)
Sets the uncompressed size of the entry data.void
setTime(java.nio.file.attribute.FileTime fileTime)
Sets the modification time of the entry.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, getCreationTime, getExtra, getLastAccessTime, getLastModifiedTime, getTime, getTimeLocal, setComment, setCompressedSize, setCrc, setCreationTime, setLastAccessTime, setLastModifiedTime, setTime, setTimeLocal, toString
-
-
-
-
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
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 fromentryName
- name of the entry
-
ZipArchiveEntry
public ZipArchiveEntry(java.nio.file.Path inputPath, java.lang.String entryName, java.nio.file.LinkOption... options) throws java.io.IOException
Creates a new zip entry taking some information from the given path 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:
inputPath
- path to create the entry from.entryName
- name of the entry.options
- options indicating how symbolic links are handled.- Throws:
java.io.IOException
- if an I/O error occurs.- Since:
- 1.21
-
-
Method Detail
-
setTime
public void setTime(java.nio.file.attribute.FileTime fileTime)
Sets the modification time of the entry.- Parameters:
fileTime
- the entry modification time.- Since:
- 1.21
-
clone
public java.lang.Object clone()
Overwrite clone.- Overrides:
clone
in classjava.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 classjava.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 classjava.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 useZipFile
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
- anint
value
-
getExternalAttributes
public long getExternalAttributes()
Retrieves the external file attributes.Note:
ZipArchiveInputStream
is unable to fill this field, you must useZipFile
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
- anlong
value
-
setUnixMode
public void setUnixMode(int mode)
Sets Unix permissions in a way that is understood by Info-Zip's unzip command.- Parameters:
mode
- anint
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.
-
setAlignment
public void setAlignment(int alignment)
Sets alignment for this entry.- Parameters:
alignment
- requested alignment, 0 for default.- Since:
- 1.14
-
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 asUnparseableExtraFieldData
if such data exists.- Returns:
- an array of the extra fields
- Since:
- 1.1
-
getExtraFields
public ZipExtraField[] getExtraFields(ExtraFieldParsingBehavior parsingBehavior) throws java.util.zip.ZipException
Retrieves extra fields.- Parameters:
parsingBehavior
- controls parsing of extra fields.- Returns:
- an array of the extra fields
- Throws:
java.util.zip.ZipException
- if parsing fails, can not happen ifparsingBehavior
isZipArchiveEntry.ExtraFieldParsingMode.BEST_EFFORT
.- Since:
- 1.19
-
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 anUnparseableExtraFieldData
instance.- Overrides:
setExtra
in classjava.util.zip.ZipEntry
- Parameters:
extra
- an array of bytes to be parsed into extra fields- Throws:
java.lang.RuntimeException
- if the bytes cannot be parsedjava.lang.RuntimeException
- on error
-
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.This method returns the raw name as it is stored inside of the archive.
- Specified by:
getName
in interfaceArchiveEntry
- Overrides:
getName
in classjava.util.zip.ZipEntry
- Returns:
- the entry name
-
isDirectory
public boolean isDirectory()
Is this entry a directory?- Specified by:
isDirectory
in interfaceArchiveEntry
- Overrides:
isDirectory
in classjava.util.zip.ZipEntry
- Returns:
- true if the entry is a directory
-
getSize
public long getSize()
Gets the uncompressed size of the entry data.Note:
ZipArchiveInputStream
may create entries that returnSIZE_UNKNOWN
as long as the entry hasn't been read completely.- Specified by:
getSize
in interfaceArchiveEntry
- Overrides:
getSize
in classjava.util.zip.ZipEntry
- Returns:
- the entry size
-
setSize
public void setSize(long size)
Sets the uncompressed size of the entry data.- Overrides:
setSize
in classjava.util.zip.ZipEntry
- Parameters:
size
- the uncompressed size in bytes- Throws:
java.lang.IllegalArgumentException
- if the specified size is less than 0
-
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
-
getDataOffset
public long getDataOffset()
Description copied from interface:EntryStreamOffsets
Gets the offset of data stream within the archive file,- Specified by:
getDataOffset
in interfaceEntryStreamOffsets
- Returns:
- the offset of entry data stream,
OFFSET_UNKNOWN
if not known.
-
isStreamContiguous
public boolean isStreamContiguous()
Description copied from interface:EntryStreamOffsets
Indicates whether the stream is contiguous, i.e. not split among several archive parts, interspersed with control blocks, etc.- Specified by:
isStreamContiguous
in interfaceEntryStreamOffsets
- Returns:
- true if stream is contiguous, false otherwise.
-
hashCode
public int hashCode()
Get the hashCode of the entry. This uses the name as the hashcode.- Overrides:
hashCode
in classjava.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()
WrapsZipEntry.getTime()
with aDate
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 interfaceArchiveEntry
- Returns:
- the last modified date of this entry.
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.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
-
getNameSource
public ZipArchiveEntry.NameSource getNameSource()
The source of the name field value.- Returns:
- source of the name field value
- Since:
- 1.16
-
setNameSource
public void setNameSource(ZipArchiveEntry.NameSource nameSource)
Sets the source of the name field value.- Parameters:
nameSource
- source of the name field value- Since:
- 1.16
-
getCommentSource
public ZipArchiveEntry.CommentSource getCommentSource()
The source of the comment field value.- Returns:
- source of the comment field value
- Since:
- 1.16
-
setCommentSource
public void setCommentSource(ZipArchiveEntry.CommentSource commentSource)
Sets the source of the comment field value.- Parameters:
commentSource
- source of the comment field value- Since:
- 1.16
-
getDiskNumberStart
public long getDiskNumberStart()
The number of the split segment this entry starts at.- Returns:
- the number of the split segment this entry starts at.
- Since:
- 1.20
-
setDiskNumberStart
public void setDiskNumberStart(long diskNumberStart)
The number of the split segment this entry starts at.- Parameters:
diskNumberStart
- the number of the split segment this entry starts at.- Since:
- 1.20
-
-