@ThreadSafe public class ZipFile extends RawZipFile<ZipEntry>
java.util.zip.ZipFile
.
Where the constructors of this class accept a charset
parameter, this is used to decode comments and entry names in the ZIP file.
However, if an entry has bit 11 set in its General Purpose Bit Flag,
then this parameter is ignored and "UTF-8" is used for this entry.
This is in accordance to Appendix D of PKWARE's ZIP File Format
Specification, version 6.3.0 and later.
This class is able to skip a preamble like the one found in self extracting archives.
Note that the entries returned by this class are instances of
de.schlichtherle.truezip.io.zip.ZipEntry
instead of
java.util.zip.ZipEntry
.
This class is thread-safe.
ZipOutputStream
DEFAULT_CHARSET
Constructor and Description |
---|
ZipFile(File file)
Equivalent to
ZipFile(file, DEFAULT_CHARSET, true, false) |
ZipFile(File file,
Charset charset)
Equivalent to
ZipFile(file, charset, true, false) |
ZipFile(File file,
Charset charset,
boolean preambled,
boolean postambled)
Opens the given
File for reading its entries. |
ZipFile(ReadOnlyFile rof)
Equivalent to
ZipFile(rof, DEFAULT_CHARSET, true, false) |
ZipFile(ReadOnlyFile rof,
Charset charset)
Equivalent to
ZipFile(rof, charset, true, false) |
ZipFile(ReadOnlyFile rof,
Charset charset,
boolean preambled,
boolean postambled)
Opens the given
ReadOnlyFile for reading its entries. |
ZipFile(String path)
Equivalent to
ZipFile(name, DEFAULT_CHARSET, true, false) |
ZipFile(String path,
Charset charset)
Equivalent to
ZipFile(name, charset, true, false) |
ZipFile(String path,
Charset charset,
boolean preambled,
boolean postambled)
Opens the ZIP file identified by the given path name for reading its
entries.
|
Modifier and Type | Method and Description |
---|---|
boolean |
busy()
Returns
true if and only if this ZIP file is busy reading
one or more entries. |
void |
close()
Closes the file.
|
Enumeration<? extends ZipEntry> |
entries()
Enumerates clones of all entries in this ZIP file.
|
ZipCryptoParameters |
getCryptoParameters()
Returns the parameters for encryption or authentication of entries.
|
ZipEntry |
getEntry(String name)
Returns a clone of the entry for the given name or
null if no
entry with this name exists. |
protected InputStream |
getInputStream(String name,
Boolean check,
boolean process)
Returns an
InputStream for reading the contents of the given
entry. |
String |
getName()
Returns the
string representation of whatever
input source object was used to construct this ZIP file. |
InputStream |
getPostambleInputStream()
Returns an
InputStream to read the postamble of this ZIP file. |
InputStream |
getPreambleInputStream()
Returns an
InputStream to read the preamble of this ZIP file. |
Iterator<ZipEntry> |
iterator()
Iterates through clones for all entries in this ZIP file.
|
void |
recoverLostEntries()
Recovers any lost entries which have been added to the ZIP file after
the (last) End Of Central Directory Record (EOCDR).
|
void |
setCryptoParameters(ZipCryptoParameters cryptoParameters)
Sets the parameters for encryption or authentication of entries.
|
getCharset, getCheckedInputStream, getCheckedInputStream, getComment, getInputStream, getInputStream, getPostambleLength, getPreambleLength, getRawCharset, length, offsetsConsiderPreamble, size
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEach, spliterator
public ZipFile(File file) throws IOException
ZipFile(file, DEFAULT_CHARSET, true, false)
IOException
public ZipFile(File file, Charset charset) throws IOException
ZipFile(file, charset, true, false)
IOException
public ZipFile(File file, Charset charset, boolean preambled, boolean postambled) throws IOException
File
for reading its entries.file
- the file.charset
- the charset to use for decoding entry names and ZIP file
comment.preambled
- if this is true
, then the ZIP file may have a
preamble.
Otherwise, the ZIP file must start with either a Local File
Header (LFH) signature or an End Of Central Directory (EOCD)
Header, causing this constructor to fail if the file is actually
a false positive ZIP file, i.e. not compatible to the ZIP File
Format Specification.
This may be useful to read Self Extracting ZIP files (SFX), which
usually contain the application code required for extraction in
the preamble.postambled
- if this is true
, then the ZIP file may have a
postamble of arbitrary length.
Otherwise, the ZIP file must not have a postamble which exceeds
64KB size, including the End Of Central Directory record
(i.e. including the ZIP file comment), causing this constructor
to fail if the file is actually a false positive ZIP file, i.e.
not compatible to the ZIP File Format Specification.
This may be useful to read Self Extracting ZIP files (SFX) with
large postambles.FileNotFoundException
- if file
cannot get opened for
reading.ZipException
- if file
is not compatible with the ZIP
File Format Specification.IOException
- on any other I/O related issue.recoverLostEntries()
public ZipFile(ReadOnlyFile rof) throws IOException
ZipFile(rof, DEFAULT_CHARSET, true, false)
IOException
public ZipFile(ReadOnlyFile rof, Charset charset) throws IOException
ZipFile(rof, charset, true, false)
IOException
public ZipFile(ReadOnlyFile rof, Charset charset, boolean preambled, boolean postambled) throws IOException
ReadOnlyFile
for reading its entries.rof
- the random access read only file.charset
- the charset to use for decoding entry names and ZIP file
comment.preambled
- if this is true
, then the ZIP file may have a
preamble.
Otherwise, the ZIP file must start with either a Local File
Header (LFH) signature or an End Of Central Directory (EOCD)
Header, causing this constructor to fail if the file is actually
a false positive ZIP file, i.e. not compatible to the ZIP File
Format Specification.
This may be useful to read Self Extracting ZIP files (SFX), which
usually contain the application code required for extraction in
the preamble.postambled
- if this is true
, then the ZIP file may have a
postamble of arbitrary length.
Otherwise, the ZIP file must not have a postamble which exceeds
64KB size, including the End Of Central Directory record
(i.e. including the ZIP file comment), causing this constructor
to fail if the file is actually a false positive ZIP file, i.e.
not compatible to the ZIP File Format Specification.
This may be useful to read Self Extracting ZIP files (SFX) with
large postambles.FileNotFoundException
- if rof
cannot get opened for
reading.ZipException
- if rof
is not compatible with the ZIP
File Format Specification.IOException
- on any other I/O related issue.recoverLostEntries()
public ZipFile(String path) throws IOException
ZipFile(name, DEFAULT_CHARSET, true, false)
IOException
public ZipFile(String path, Charset charset) throws IOException
ZipFile(name, charset, true, false)
IOException
public ZipFile(String path, Charset charset, boolean preambled, boolean postambled) throws IOException
path
- the path name of the file.charset
- the charset to use for decoding entry names and ZIP file
comment.preambled
- if this is true
, then the ZIP file may have a
preamble.
Otherwise, the ZIP file must start with either a Local File
Header (LFH) signature or an End Of Central Directory (EOCD)
Header, causing this constructor to fail if the file is actually
a false positive ZIP file, i.e. not compatible to the ZIP File
Format Specification.
This may be useful to read Self Extracting ZIP files (SFX), which
usually contain the application code required for extraction in
the preamble.postambled
- if this is true
, then the ZIP file may have a
postamble of arbitrary length.
Otherwise, the ZIP file must not have a postamble which exceeds
64KB size, including the End Of Central Directory record
(i.e. including the ZIP file comment), causing this constructor
to fail if the file is actually a false positive ZIP file, i.e.
not compatible to the ZIP File Format Specification.
This may be useful to read Self Extracting ZIP files (SFX) with
large postambles.FileNotFoundException
- if name
cannot get opened for
reading.ZipException
- if name
is not compatible with the ZIP
File Format Specification.IOException
- on any other I/O related issue.recoverLostEntries()
public boolean busy()
RawZipFile
true
if and only if this ZIP file is busy reading
one or more entries.busy
in class RawZipFile<ZipEntry>
public void close() throws IOException
RawZipFile
close
in interface Closeable
close
in interface AutoCloseable
close
in class RawZipFile<ZipEntry>
IOException
- if an error occurs closing the file.public Enumeration<? extends ZipEntry> entries()
iterator()
@Nullable public ZipCryptoParameters getCryptoParameters()
RawZipFile
getCryptoParameters
in class RawZipFile<ZipEntry>
public ZipEntry getEntry(String name)
null
if no
entry with this name exists.getEntry
in class RawZipFile<ZipEntry>
name
- the name of the ZIP entry.protected InputStream getInputStream(String name, Boolean check, boolean process) throws IOException
RawZipFile
InputStream
for reading the contents of the given
entry.
If the RawZipFile.close()
method is called on this instance, all input
streams returned by this method are closed, too.
getInputStream
in class RawZipFile<ZipEntry>
name
- The name of the entry to get the stream for.check
- Whether or not the entry content gets checked/authenticated.
If the parameter process
is false
, then this
parameter is ignored.
Otherwise, if this parameter is null
, then it is set to
the ZipEntry.isEncrypted()
property of the given entry.
Finally, if this parameter is true
,
then the following additional check is performed for the entry:
ZipAuthenticationException
gets thrown from this
method (pre-check).
CRC32Exception
gets thrown when InputStream.close()
is called on the
returned entry stream (post-check).
process
- Whether or not the entry contents should get processed,
e.g. inflated.
This should be set to false
if and only if the
application is going to copy entries from an input ZIP file to
an output ZIP file.null
if the
entry does not exist.ZipAuthenticationException
- If the entry is encrypted and
checking the MAC fails.ZipException
- If this file is not compatible to the ZIP File
Format Specification.IOException
- If the entry cannot get read from this ZipFile.public String getName()
string representation
of whatever
input source object was used to construct this ZIP file.
For String
and File
objects, this is a path name.public InputStream getPostambleInputStream() throws IOException
RawZipFile
InputStream
to read the postamble of this ZIP file.
Note that the returned stream is a lightweight stream,
i.e. there is no external resource such as a ReadOnlyFile
allocated for it. Instead, all streams returned by this method share
the underlying ReadOnlyFile
of this ZipFile
.
This allows to close this object (and hence the underlying
ReadOnlyFile
) without cooperation of the returned
streams, which is important if the client application wants to work on
the underlying file again (e.g. update or delete it).
getPostambleInputStream
in class RawZipFile<ZipEntry>
ZipException
- If this ZIP file has been closed.IOException
public InputStream getPreambleInputStream() throws IOException
RawZipFile
InputStream
to read the preamble of this ZIP file.
Note that the returned stream is a lightweight stream,
i.e. there is no external resource such as a ReadOnlyFile
allocated for it. Instead, all streams returned by this method share
the underlying ReadOnlyFile
of this ZipFile
.
This allows to close this object (and hence the underlying
ReadOnlyFile
) without cooperation of the returned
streams, which is important if the client application wants to work on
the underlying file again (e.g. update or delete it).
getPreambleInputStream
in class RawZipFile<ZipEntry>
ZipException
- If this ZIP file has been closed.IOException
public Iterator<ZipEntry> iterator()
public void recoverLostEntries() throws IOException
crypto parameters
.
This method starts parsing entries at the start of the postamble and continues until it hits EOF or any non-entry data. As a side effect, it will not only add any found entries to its internal map, but will also cut the start of the postamble accordingly.
Note that it's very likely that this method terminates with an
exception unless the postamble is empty or contains only valid ZIP
entries.
Therefore it may be a good idea to log or silently ignore any exception
thrown by this method.
If an exception is thrown, you can check and recover the remaining
postamble for post-mortem analysis by calling
RawZipFile.getPostambleLength()
and RawZipFile.getPostambleInputStream()
.
Note that this method is not thread-safe!
recoverLostEntries
in class RawZipFile<ZipEntry>
ZipException
- if an invalid entry is found.IOException
- if any other I/O error occurs.public void setCryptoParameters(@CheckForNull ZipCryptoParameters cryptoParameters)
cryptoParameters
- the parameters for encryption or authentication
of entries.Copyright © 2005–2018 Schlichtherle IT Services. All rights reserved.