org.apache.commons.compress.archivers.zip
Class ZipOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by java.io.FilterOutputStream
          extended by java.util.zip.DeflaterOutputStream
              extended by org.apache.commons.compress.archivers.zip.ZipOutputStream
All Implemented Interfaces:
java.io.Closeable, java.io.Flushable

public class ZipOutputStream
extends java.util.zip.DeflaterOutputStream

Reimplementation of java.util.zip.ZipOutputStream that 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 putNextEntry will be called.


Field Summary
protected static ZipLong CFH_SIG
          central file header signature
protected static ZipLong DD_SIG
          data descriptor signature
static int DEFLATED
          Compression method for deflated entries.
protected static ZipLong EOCD_SIG
          end of central dir signature
protected static ZipLong LFH_SIG
          local file header signature
static int STORED
          Compression method for deflated entries.
 
Fields inherited from class java.util.zip.DeflaterOutputStream
buf, def
 
Fields inherited from class java.io.FilterOutputStream
out
 
Constructor Summary
ZipOutputStream(java.io.OutputStream output)
          Creates a new ZIP OutputStream filtering the underlying stream.
 
Method Summary
 void closeEntry()
          Writes all necessary data for this entry.
 void finish()
          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.String getEncoding()
          The encoding to use for filenames and the file comment.
 void putNextEntry(ZipArchiveEntry entry)
          Begin writing next entry.
 void setComment(java.lang.String comment)
          Set the file comment.
 void setEncoding(java.lang.String encoding)
          The encoding to use for filenames and the file comment.
 void setLevel(int level)
          Sets the compression level for subsequent entries.
 void setMethod(int method)
          Sets the default compression method for subsequent entries.
protected static ZipLong toDosTime(java.util.Date time)
          Convert a Date object to a DOS date/time field.
 void write(byte[] buffer, int offset, int length)
          Writes bytes to ZIP entry.
protected  void writeCentralDirectoryEnd()
          Writes the "End of central dir record"
protected  void writeCentralFileHeader(ZipArchiveEntry entry)
          Writes the central file header entry
protected  void writeDataDescriptor(ZipArchiveEntry ze)
          Writes the data descriptor entry
protected  void writeLocalFileHeader(ZipArchiveEntry entry)
          Writes the local file header entry
 
Methods inherited from class java.util.zip.DeflaterOutputStream
close, deflate, write
 
Methods inherited from class java.io.FilterOutputStream
flush, write
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

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
Constructor Detail

ZipOutputStream

public ZipOutputStream(java.io.OutputStream output)
Creates a new ZIP OutputStream filtering the underlying stream.

Parameters:
output - the output stream to write to
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.IOException
Writes 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.IOException
Finishs writing the contents and closes this as well as the underlying stream.

Overrides:
finish in class java.util.zip.DeflaterOutputStream
Throws:
java.io.IOException - if an IO failure causes operation to fail
Since:
1.1

putNextEntry

public void putNextEntry(ZipArchiveEntry 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.IOException
Writes bytes to ZIP entry.

Override is necessary to support STORED entries, as well as calculationg CRC automatically for DEFLATED entries.

Overrides:
write in class java.util.zip.DeflaterOutputStream
Parameters:
buffer - the buffer to write to
offset - the offset to write to
length - 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.ZipException
Retrieve 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.IOException
Writes 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(ZipArchiveEntry 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(ZipArchiveEntry 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(ZipArchiveEntry 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