org.apache.commons.compress.archivers.zip

Class ZipEntry

public class ZipEntry extends ZipEntry

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

Version: $Revision: 155439 $

Author: Stefan Bodewig

Field Summary
static Objectc_lockReflection
Helper for JDK 1.1
static Methodc_setCompressedSizeMethod
Helper for JDK 1.1
static booleanc_triedToGetMethod
Helper for JDK 1.1
Longm_compressedSize
Helper for JDK 1.1 <-> 1.2 incompatibility.
longm_externalAttributes
ArrayListm_extraFields
intm_internalAttributes
Constructor Summary
ZipEntry(String name)
Creates a new zip entry with the specified name.
ZipEntry(ZipEntry entry)
Creates a new zip entry with fields taken from the specified zip entry.
ZipEntry(ZipEntry entry)
Creates a new zip entry with fields taken from the specified zip entry.
Method Summary
voidaddExtraField(ZipExtraField extraField)
Adds an extra fields - replacing an already present extra field of the same type.
static voidcheckSCS()
Try to get a handle to the setCompressedSize method.
Objectclone()
Overwrite clone
byte[]getCentralDirectoryExtra()
Retrieves the extra data for the central directory.
longgetCompressedSize()
Override to make this class work in JDK 1.1 like a 1.2 class.
longgetExternalAttributes()
Retrieves the external file attributes.
ZipExtraField[]getExtraFields()
Retrieves extra fields.
intgetInternalAttributes()
Retrieves the internal file attributes.
byte[]getLocalFileDataExtra()
Retrieves the extra data for the local file data.
static booleanhaveSetCompressedSize()
Are we running JDK 1.2 or higher?
static voidperformSetCompressedSize(ZipEntry entry, long size)
Invoke setCompressedSize via reflection.
voidremoveExtraField(ZipShort type)
Remove an extra fields.
voidsetComprSize(long size)
Make this class work in JDK 1.1 like a 1.2 class.
voidsetExternalAttributes(long externalAttributes)
Sets the external file attributes.
voidsetExtra(byte[] extra)
Throws an Exception if extra data cannot be parsed into extra fields.
protected voidsetExtra()
Unfortunately java.util.zip.ZipOutputStream 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.
voidsetExtraFields(ZipExtraField[] fields)
Replaces all currently attached extra fields with the new array.
voidsetInternalAttributes(int value)
Sets the internal file attributes.

Field Detail

c_lockReflection

private static final Object c_lockReflection
Helper for JDK 1.1

Since: 1.2

c_setCompressedSizeMethod

private static Method c_setCompressedSizeMethod
Helper for JDK 1.1

Since: 1.2

c_triedToGetMethod

private static boolean c_triedToGetMethod
Helper for JDK 1.1

Since: 1.2

m_compressedSize

private Long m_compressedSize
Helper for JDK 1.1 <-> 1.2 incompatibility.

Since: 1.2

m_externalAttributes

private long m_externalAttributes

m_extraFields

private final ArrayList m_extraFields

m_internalAttributes

private int m_internalAttributes

Constructor Detail

ZipEntry

public ZipEntry(String name)
Creates a new zip entry with the specified name.

Parameters: name the name of entry

Since: 1.1

ZipEntry

public ZipEntry(ZipEntry entry)
Creates a new zip entry with fields taken from the specified zip entry.

Parameters: entry the JDK ZipEntry to adapt

Throws: ZipException if can not create entry

Since: 1.1

ZipEntry

public ZipEntry(ZipEntry entry)
Creates a new zip entry with fields taken from the specified zip entry.

Parameters: entry the entry to adapt

Throws: ZipException if can not create entry

Since: 1.1

Method Detail

addExtraField

public void addExtraField(ZipExtraField extraField)
Adds an extra fields - replacing an already present extra field of the same type.

Parameters: extraField The feature to be added to the ExtraField attribute

Since: 1.1

checkSCS

private static void checkSCS()
Try to get a handle to the setCompressedSize method.

Since: 1.2

clone

public Object clone()
Overwrite clone

Returns: Description of the Returned Value

Since: 1.1

getCentralDirectoryExtra

public byte[] getCentralDirectoryExtra()
Retrieves the extra data for the central directory.

Returns: The CentralDirectoryExtra value

Since: 1.1

getCompressedSize

public long getCompressedSize()
Override to make this class work in JDK 1.1 like a 1.2 class.

Returns: The CompressedSize value

Since: 1.2

getExternalAttributes

public long getExternalAttributes()
Retrieves the external file attributes.

Returns: The ExternalAttributes value

Since: 1.1

getExtraFields

public ZipExtraField[] getExtraFields()
Retrieves extra fields.

Returns: The ExtraFields value

Since: 1.1

getInternalAttributes

public int getInternalAttributes()
Retrieves the internal file attributes.

Returns: The InternalAttributes value

Since: 1.1

getLocalFileDataExtra

public byte[] getLocalFileDataExtra()
Retrieves the extra data for the local file data.

Returns: The LocalFileDataExtra value

Since: 1.1

haveSetCompressedSize

private static boolean haveSetCompressedSize()
Are we running JDK 1.2 or higher?

Returns: Description of the Returned Value

Since: 1.2

performSetCompressedSize

private static void performSetCompressedSize(ZipEntry entry, long size)
Invoke setCompressedSize via reflection.

Parameters: entry Description of Parameter size Description of Parameter

Since: 1.2

removeExtraField

public void removeExtraField(ZipShort type)
Remove an extra fields.

Parameters: type Description of Parameter

Since: 1.1

setComprSize

public void setComprSize(long size)
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 new ComprSize value

Since: 1.2

setExternalAttributes

public void setExternalAttributes(long externalAttributes)
Sets the external file attributes.

Parameters: externalAttributes The new ExternalAttributes value

Since: 1.1

setExtra

public void setExtra(byte[] extra)
Throws an Exception if extra data cannot be parsed into extra fields.

Parameters: extra The new Extra value

Throws: RuntimeException if fail to set extra data

Since: 1.1

setExtra

protected void setExtra()
Unfortunately java.util.zip.ZipOutputStream 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

setExtraFields

public void setExtraFields(ZipExtraField[] fields)
Replaces all currently attached extra fields with the new array.

Parameters: fields The new ExtraFields value

Since: 1.1

setInternalAttributes

public void setInternalAttributes(int value)
Sets the internal file attributes.

Parameters: value The new InternalAttributes value

Since: 1.1