Package com.iizix.util
Class MemoryJarFile
java.lang.Object
java.util.zip.ZipFile
java.util.jar.JarFile
com.iizix.util.MemoryJarFile
- All Implemented Interfaces:
IJarFile
,Closeable
,AutoCloseable
Extends the normal Jar file for processing files with various character case, and mixture of forward and backslashes. It is used to load entirely into memory and supports decryption on entry basis.
Please note that this class currently only supports file items smaller than 2 GB, i.e. a 31 bit long positive integer value.
- Author:
- Christopher Mindus
Field Summary
Modifier and TypeFieldDescriptionstatic final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final long
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final long
static final int
static final int
static final int
static final int
static final int
static final int
static final long
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final int
static final long
static final int
static final int
static final int
Fields inherited from class java.util.jar.JarFile
MANIFEST_NAME
Fields inherited from class java.util.zip.ZipFile
OPEN_DELETE, OPEN_READ
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Closes the ZIP file.static MemoryJarFile
createJarFile
(File file, boolean verify, boolean winStyle, MemoryJarFileDecrypter streamDecrypter, MemoryJarFileDecrypter entryDecrypter) Creates a memory Jar file.static MemoryJarFile
createJarFile
(InputStream in, boolean verify, boolean winStyle, MemoryJarFileDecrypter streamDecrypter, MemoryJarFileDecrypter entryDecrypter, long lastModified) Creates a memory Jar file.static MemoryJarFile
createJarFile
(String fileName, boolean verify, boolean winStyle, MemoryJarFileDecrypter streamDecrypter, MemoryJarFileDecrypter entryDecrypter) Creates a memory Jar file.static MemoryJarFile
createJarFile
(JarInputStream jin, boolean winStyle, long lastModified) Creates a memory Jar file.static MemoryJarFile
createJarFile
(JarInputStream jin, boolean winStyle, MemoryJarFileDecrypter decrypter, long lastModified) Creates a memory Jar file.static MemoryJarFile
createJarFile
(JarInputStream jin, long lastModified) Creates a memory Jar file.entries()
Returns an enumeration of the Jar file entries.byte[]
getByteArray
(ZipEntry ze) Returns the byte array of the contents of the specified zip file entry.Gets the Zip entry with the specified name.byte[]
getEntryData
(String name) Gets the byte [] data for an entry if present.byte[]
getEntryData
(ZipEntry ze) Gets the byte [] data for an entry if present.Gets the URL stream handler for the MemoryJarFile.Returns an input stream for reading the contents of the specified zip file entry.JarEntry[]
Gets all Jar entries if the Jar file is loaded into memory.getJarEntry
(String name) Gets the Jar entry with the specified name.Gets the file of the Jar file.Returns the Jar file manifest, ornull
if none.getName()
Gets the name of the Jar file.getURL()
Gets the MemoryJar URL to be used with e.g.Gets the MemoryJar URL to be used with e.g.Gets the MemoryJar URL to be used with e.g.long
Returns the time that the file denoted by this abstract pathname was last modified.void
Sets the name of the Jar file.int
size()
Returns the number of entries in the Jar file.stream()
Returns a stream of Jar entries.Methods inherited from class java.util.jar.JarFile
baseVersion, getVersion, isMultiRelease, runtimeVersion, versionedStream
Methods inherited from class java.util.zip.ZipFile
getComment
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.iizix.util.IJarFile
hasChanged
Field Details
LOCSIG
static final long LOCSIG- See Also:
EXTSIG
static final long EXTSIG- See Also:
CENSIG
static final long CENSIG- See Also:
ENDSIG
static final long ENDSIG- See Also:
LOCHDR
static final int LOCHDR- See Also:
EXTHDR
static final int EXTHDR- See Also:
CENHDR
static final int CENHDR- See Also:
ENDHDR
static final int ENDHDR- See Also:
LOCVER
static final int LOCVER- See Also:
LOCFLG
static final int LOCFLG- See Also:
LOCHOW
static final int LOCHOW- See Also:
LOCTIM
static final int LOCTIM- See Also:
LOCCRC
static final int LOCCRC- See Also:
LOCSIZ
static final int LOCSIZ- See Also:
LOCLEN
static final int LOCLEN- See Also:
LOCNAM
static final int LOCNAM- See Also:
LOCEXT
static final int LOCEXT- See Also:
EXTCRC
static final int EXTCRC- See Also:
EXTSIZ
static final int EXTSIZ- See Also:
EXTLEN
static final int EXTLEN- See Also:
CENVEM
static final int CENVEM- See Also:
CENVER
static final int CENVER- See Also:
CENFLG
static final int CENFLG- See Also:
CENHOW
static final int CENHOW- See Also:
CENTIM
static final int CENTIM- See Also:
CENCRC
static final int CENCRC- See Also:
CENSIZ
static final int CENSIZ- See Also:
CENLEN
static final int CENLEN- See Also:
CENNAM
static final int CENNAM- See Also:
CENEXT
static final int CENEXT- See Also:
CENCOM
static final int CENCOM- See Also:
CENDSK
static final int CENDSK- See Also:
CENATT
static final int CENATT- See Also:
CENATX
static final int CENATX- See Also:
CENOFF
static final int CENOFF- See Also:
ENDSUB
static final int ENDSUB- See Also:
ENDTOT
static final int ENDTOT- See Also:
ENDSIZ
static final int ENDSIZ- See Also:
ENDOFF
static final int ENDOFF- See Also:
ENDCOM
static final int ENDCOM- See Also:
Method Details
createJarFile
Creates a memory Jar file. The Jar input stream is closed before returning, the new Jar file will not have the 'winStyle' parameter set.- Parameters:
jin
- the Jar input stream.lastModified
- time for last file modification, -1L for when the first empty Jar was created.- Throws:
IOException
- for file failures.
createJarFile
public static MemoryJarFile createJarFile(JarInputStream jin, boolean winStyle, long lastModified) throws IOException Creates a memory Jar file. The Jar input stream is closed before returning.- Parameters:
jin
- the Jar input stream.winStyle
- if true, the entries are case insensitive and backslash can be used with forward slash as well.lastModified
- time for last file modification, -1L for when the first empty Jar was created.- Throws:
IOException
- for file failures.
createJarFile
public static MemoryJarFile createJarFile(JarInputStream jin, boolean winStyle, MemoryJarFileDecrypter decrypter, long lastModified) throws IOException Creates a memory Jar file. The Jar input stream is closed before returning.- Parameters:
jin
- the Jar input stream.winStyle
- if true, the entries are case insensitive and backslash can be used with forward slash as well.decrypter
- an instance of a class implementing the MemoryJarFileDecrypter interface to provide decryption of an entry.lastModified
- time for last file modification, -1L for when the first empty Jar was created.- Throws:
IOException
- for file failures.
createJarFile
public static MemoryJarFile createJarFile(InputStream in, boolean verify, boolean winStyle, MemoryJarFileDecrypter streamDecrypter, MemoryJarFileDecrypter entryDecrypter, long lastModified) throws IOException Creates a memory Jar file. The input stream is closed before returning.- Parameters:
in
- an input stream.verify
- set to true to verify the Jar file for correctness.winStyle
- if true, the entries are case insensitive and backslash can be used with forward slash as well.streamDecrypter
- an instance of a class implementing the MemoryJarFileDecrypter interface to provide decryption of the entire input stream data, set tonull
for no decryption.entryDecrypter
- an instance of a class implementing the MemoryJarFileDecrypter interface to provide decryption of an entry, set tonull
for no decryption.lastModified
- time for last file modification, -1L for when the first empty Jar was created.- Throws:
IOException
- for file failures.
createJarFile
public static MemoryJarFile createJarFile(String fileName, boolean verify, boolean winStyle, MemoryJarFileDecrypter streamDecrypter, MemoryJarFileDecrypter entryDecrypter) throws IOException Creates a memory Jar file. The file is closed before returning.- Parameters:
fileName
- the file name of Jar file to read.verify
- set to true to verify the Jar file for correctness.winStyle
- if true, the entries are case insensitive and backslash can be used with forward slash as well.streamDecrypter
- an instance of a class implementing the MemoryJarFileDecrypter interface to provide decryption of the entire input stream data, set tonull
for no decryption.entryDecrypter
- an instance of a class implementing the MemoryJarFileDecrypter interface to provide decryption of an entry, set tonull
for no decryption.- Throws:
IOException
- for file failures.
createJarFile
public static MemoryJarFile createJarFile(File file, boolean verify, boolean winStyle, MemoryJarFileDecrypter streamDecrypter, MemoryJarFileDecrypter entryDecrypter) throws IOException Creates a memory Jar file. The File is closed before returning.- Parameters:
file
- the Jar File instance to read.verify
- set to true to verify the Jar file for correctness.winStyle
- if true, the entries are case insensitive and backslash can be used with forward slash as well.streamDecrypter
- an instance of a class implementing the MemoryJarFileDecrypter interface to provide decryption of the entire input stream data, set tonull
for no decryption.entryDecrypter
- an instance of a class implementing the MemoryJarFileDecrypter interface to provide decryption of an entry, set tonull
for no decryption.- Throws:
IOException
- for file failures.
getJarFile
Gets the file of the Jar file.- Specified by:
getJarFile
in interfaceIJarFile
- Returns:
- Always returns
null
as there is noFile
representation for a memory Jar.
lastModified
public long lastModified()Returns the time that the file denoted by this abstract pathname was last modified.- Specified by:
lastModified
in interfaceIJarFile
- Returns:
- A
long
value representing the time the file was last modified, measured in milliseconds since the epoch (00:00:00 GMT, January 1, 1970), or0L
if the file does not exist or if an I/O error occurs
getHandler
Gets the URL stream handler for the MemoryJarFile.- Specified by:
getHandler
in interfaceIJarFile
- Returns:
- The stream handler.
getURL
Gets the MemoryJar URL to be used with e.g. a class loader.getURL
Gets the MemoryJar URL to be used with e.g. a class loader.getURL
Gets the MemoryJar URL to be used with e.g. a class loader.entries
Returns an enumeration of the Jar file entries.stream
Returns a stream of Jar entries.getJarEntries
Gets all Jar entries if the Jar file is loaded into memory.- Specified by:
getJarEntries
in interfaceIJarFile
- Returns:
- All the entries as a new array.
getInputStream
Returns an input stream for reading the contents of the specified zip file entry.- Specified by:
getInputStream
in interfaceIJarFile
- Overrides:
getInputStream
in classJarFile
- Parameters:
ze
- The Zip or Jar file entry.- Returns:
- an input stream for reading the contents of the specified zip file entry
- Throws:
FileNotFoundException
- if the entry isn't found.
getByteArray
Returns the byte array of the contents of the specified zip file entry.- Returns:
- the byte array of the contents of the specified zip file entry
- Throws:
FileNotFoundException
- if the entry isn't found.
getJarEntry
Gets the Jar entry with the specified name.- Specified by:
getJarEntry
in interfaceIJarFile
- Overrides:
getJarEntry
in classJarFile
- Parameters:
name
- name of the Jar entry, 'winStyle' parameter applies, i.e. '\' is translated to '/' and the name check is done case insensitive.- Returns:
- the JarEntry found, or null for not found.
- See Also:
getEntry
Gets the Zip entry with the specified name.size
public int size()Returns the number of entries in the Jar file.getManifest
Returns the Jar file manifest, ornull
if none.- Specified by:
getManifest
in interfaceIJarFile
- Overrides:
getManifest
in classJarFile
- Returns:
- the Jar file manifest, or
null
if none.
getName
Gets the name of the Jar file. If no name has been assigned usingsetName
, the "real" temporary Jar file name from the temporary directory is returned.setName
Sets the name of the Jar file. ThegetName
method will return that name (if non-null), or the "real" temporary Jar file name from the temporary directory if thename
parameter isnull
.- Parameters:
name
- the name of the Jar file or null to reset it to the "real" temporary Jar file.
getEntryData
Gets the byte [] data for an entry if present.- Specified by:
getEntryData
in interfaceIJarFile
- Parameters:
name
- the name of the entry.- Returns:
- the byte array or null if not found.
getEntryData
Gets the byte [] data for an entry if present.- Specified by:
getEntryData
in interfaceIJarFile
- Parameters:
ze
- the name of the entry.- Returns:
- the byte array or null if not found.
close
Closes the ZIP file.Closing this ZIP file will close all of the input streams previously returned by invocations of the
getInputStream
method.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceIJarFile
- Overrides:
close
in classZipFile
- Throws:
IOException
- if an I/O error has occurred