Class ZipOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- java.io.FilterOutputStream
-
- java.util.zip.DeflaterOutputStream
-
- org.apache.commons.compress.archivers.zip.ZipOutputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.io.Flushable,java.lang.AutoCloseable
class ZipOutputStream extends java.util.zip.DeflaterOutputStreamReimplementation ofjava.util.zip.ZipOutputStreamthat does handle the extended functionality of this package, especially internal/external file attributes and extra fields with different layouts for local file data and central directory entries.This implementation will use a Data Descriptor to store size and CRC information for DEFLATED entries, this means, you don't need to calculate them yourself. Unfortunately this is not possible for the STORED method, here setting the CRC and uncompressed size information is required before
putNextEntrywill be called.- Version:
- $Revision: 155439 $
- Author:
- Stefan Bodewig
-
-
Field Summary
Fields Modifier and Type Field Description protected static ZipLongCFH_SIGcentral file header signatureprotected static ZipLongDD_SIGdata descriptor signaturestatic intDEFLATEDCompression method for deflated entries.private static ZipLongDOS_TIME_MINSmallest date/time ZIP can handle.protected static ZipLongEOCD_SIGend of central dir signatureprotected static ZipLongLFH_SIGlocal file header signatureprivate static byte[]LZEROHelper, a 0 as ZipLong.private ZipLongm_cdLengthLength of central directory.private ZipLongm_cdOffsetStart of central directory.private java.lang.Stringm_commentThe file comment.private java.util.zip.CRC32m_crcCRC instance to avoid parsing DEFLATED data twice.private longm_dataStartData for current entry started here.private java.lang.Stringm_encodingThe encoding to use for filenames and the file comment.private java.util.ArrayListm_entriesList of ZipEntries written so far.private ZipEntrym_entryCurrent entry.private intm_levelCompression level for next entry.private intm_methodDefault compression method for next entry.private java.util.Hashtablem_offsetsHolds the offsets of the LFH starts for each entryprivate longm_writtenCount the bytes written to out.static intSTOREDCompression method for deflated entries.private static byte[]ZEROHelper, a 0 as ZipShort.
-
Constructor Summary
Constructors Constructor Description ZipOutputStream(java.io.OutputStream output)Creates a new ZIP OutputStream filtering the underlying stream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcloseEntry()Writes all necessary data for this entry.voidfinish()Finishs writing the contents and closes this as well as the underlying stream.protected byte[]getBytes(java.lang.String name)Retrieve the bytes for the given String in the encoding set for this Stream.java.lang.StringgetEncoding()The encoding to use for filenames and the file comment.voidputNextEntry(ZipEntry entry)Begin writing next entry.voidsetComment(java.lang.String comment)Set the file comment.voidsetEncoding(java.lang.String encoding)The encoding to use for filenames and the file comment.voidsetLevel(int level)Sets the compression level for subsequent entries.voidsetMethod(int method)Sets the default compression method for subsequent entries.protected static ZipLongtoDosTime(java.util.Date time)Convert a Date object to a DOS date/time field.voidwrite(byte[] buffer, int offset, int length)Writes bytes to ZIP entry.protected voidwriteCentralDirectoryEnd()Writes the "End of central dir record"protected voidwriteCentralFileHeader(ZipEntry entry)Writes the central file header entryprotected voidwriteDataDescriptor(ZipEntry ze)Writes the data descriptor entryprotected voidwriteLocalFileHeader(ZipEntry entry)Writes the local file header entry
-
-
-
Field Detail
-
ZERO
private static final byte[] ZERO
Helper, a 0 as ZipShort.- Since:
- 1.1
-
LZERO
private static final byte[] LZERO
Helper, a 0 as ZipLong.- Since:
- 1.1
-
DEFLATED
public static final int DEFLATED
Compression method for deflated entries.- Since:
- 1.1
- See Also:
- Constant Field Values
-
STORED
public static final int STORED
Compression method for deflated entries.- Since:
- 1.1
- See Also:
- Constant Field Values
-
LFH_SIG
protected static final ZipLong LFH_SIG
local file header signature- Since:
- 1.1
-
DD_SIG
protected static final ZipLong DD_SIG
data descriptor signature- Since:
- 1.1
-
CFH_SIG
protected static final ZipLong CFH_SIG
central file header signature- Since:
- 1.1
-
EOCD_SIG
protected static final ZipLong EOCD_SIG
end of central dir signature- Since:
- 1.1
-
DOS_TIME_MIN
private static final ZipLong DOS_TIME_MIN
Smallest date/time ZIP can handle.- Since:
- 1.1
-
m_comment
private java.lang.String m_comment
The file comment.- Since:
- 1.1
-
m_level
private int m_level
Compression level for next entry.- Since:
- 1.1
-
m_method
private int m_method
Default compression method for next entry.- Since:
- 1.1
-
m_entries
private final java.util.ArrayList m_entries
List of ZipEntries written so far.- Since:
- 1.1
-
m_crc
private final java.util.zip.CRC32 m_crc
CRC instance to avoid parsing DEFLATED data twice.- Since:
- 1.1
-
m_written
private long m_written
Count the bytes written to out.- Since:
- 1.1
-
m_dataStart
private long m_dataStart
Data for current entry started here.- Since:
- 1.1
-
m_cdOffset
private ZipLong m_cdOffset
Start of central directory.- Since:
- 1.1
-
m_cdLength
private ZipLong m_cdLength
Length of central directory.- Since:
- 1.1
-
m_offsets
private final java.util.Hashtable m_offsets
Holds the offsets of the LFH starts for each entry- Since:
- 1.1
-
m_encoding
private java.lang.String m_encoding
The encoding to use for filenames and the file comment.For a list of possible values see http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html . Defaults to the platform's default character encoding.
- Since:
- 1.3
-
m_entry
private ZipEntry m_entry
Current entry.- Since:
- 1.1
-
-
Method Detail
-
toDosTime
protected static ZipLong toDosTime(java.util.Date time)
Convert a Date object to a DOS date/time field.Stolen from InfoZip's
fileio.c- Parameters:
time- Description of Parameter- Returns:
- Description of the Returned Value
- Since:
- 1.1
-
setComment
public void setComment(java.lang.String comment)
Set the file comment.- Parameters:
comment- The new Comment value- Since:
- 1.1
-
setEncoding
public void setEncoding(java.lang.String encoding)
The encoding to use for filenames and the file comment.For a list of possible values see http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html . Defaults to the platform's default character encoding.
- Parameters:
encoding- The new Encoding value- Since:
- 1.3
-
setLevel
public void setLevel(int level)
Sets the compression level for subsequent entries.Default is Deflater.DEFAULT_COMPRESSION.
- Parameters:
level- The new Level value- Since:
- 1.1
-
setMethod
public void setMethod(int method)
Sets the default compression method for subsequent entries.Default is DEFLATED.
- Parameters:
method- The new Method value- Since:
- 1.1
-
getEncoding
public java.lang.String getEncoding()
The encoding to use for filenames and the file comment.- Returns:
- null if using the platform's default character encoding.
- Since:
- 1.3
-
closeEntry
public void closeEntry() throws java.io.IOExceptionWrites all necessary data for this entry.- Throws:
java.io.IOException- if an IO failure causes operation to fail- Since:
- 1.1
-
finish
public void finish() throws java.io.IOExceptionFinishs writing the contents and closes this as well as the underlying stream.- Overrides:
finishin classjava.util.zip.DeflaterOutputStream- Throws:
java.io.IOException- if an IO failure causes operation to fail- Since:
- 1.1
-
putNextEntry
public void putNextEntry(ZipEntry entry) throws java.io.IOException
Begin writing next entry.- Parameters:
entry- the entry- Throws:
java.io.IOException- if an IO failure causes operation to fail- Since:
- 1.1
-
write
public void write(byte[] buffer, int offset, int length) throws java.io.IOExceptionWrites bytes to ZIP entry.Override is necessary to support STORED entries, as well as calculationg CRC automatically for DEFLATED entries.
- Overrides:
writein classjava.util.zip.DeflaterOutputStream- Parameters:
buffer- the buffer to write tooffset- the offset to write tolength- the length of data to write- Throws:
java.io.IOException- if an IO error causes operation to fail
-
getBytes
protected byte[] getBytes(java.lang.String name) throws java.util.zip.ZipExceptionRetrieve the bytes for the given String in the encoding set for this Stream.- Parameters:
name- the name to decode- Returns:
- the bytes for string
- Throws:
java.util.zip.ZipException- if fail to retrieve bytes for specified string- Since:
- 1.3
-
writeCentralDirectoryEnd
protected void writeCentralDirectoryEnd() throws java.io.IOExceptionWrites the "End of central dir record"- Throws:
java.io.IOException- when an IO erro causes operation to fail- Since:
- 1.1
-
writeCentralFileHeader
protected void writeCentralFileHeader(ZipEntry entry) throws java.io.IOException
Writes the central file header entry- Parameters:
entry- the zip entry- Throws:
java.io.IOException- when an IO error causes operation to fail- Since:
- 1.1
-
writeDataDescriptor
protected void writeDataDescriptor(ZipEntry ze) throws java.io.IOException
Writes the data descriptor entry- Parameters:
ze- Description of Parameter- Throws:
java.io.IOException- if an IO failure causes operation to fail- Since:
- 1.1
-
writeLocalFileHeader
protected void writeLocalFileHeader(ZipEntry entry) throws java.io.IOException
Writes the local file header entry- Parameters:
entry- the zip entry- Throws:
java.io.IOException- when an IO error causes operation to fail- Since:
- 1.1
-
-