## org.apache.tools.zip
Class ZipOutputStream

    java.lang.Object
      |
      +--java.io.OutputStream
            |
            +--java.io.FilterOutputStream
                  |
                  +--org.apache.tools.zip.ZipOutputStream

public class ZipOutputStream
extends java.io.FilterOutputStream

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 class will try to use `RandomAccessFile` when you know that the output is going to go to a file.

If RandomAccessFile cannot be used, 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` can be called.

Version:
  $Revision: 1.17 $
Author:
  Stefan Bodewig, Richard Evans

Field Summary
`protected byte[]` `buf` Deflater buffer
`protected static ZipLong` `CFH_SIG` central file header signature
`protected static ZipLong` `DD_SIG` data descriptor signature
`protected java.util.zip.Deflater` `def` Deflater object for output
`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.io.FilterOutputStream
`out`

Constructor Summary
`ZipOutputStream(java.io.File file)` Creates a new ZIP OutputStream writing to a File.
`ZipOutputStream(java.io.OutputStream out)` Creates a new ZIP OutputStream filtering the underlying stream.

Method Summary
`void` `close()` Closes this output stream and releases any system resources associated with the stream.
`void` `closeEntry()` Writes all necessary data for this entry.
`protected void` `deflate()` Writes next block of compressed data to the output stream.
`void` `finish()` Finishs writing the contents and closes this as well as the underlying stream.
`void` `flush()` Flushes this output stream and forces any buffered output bytes to be written out to the 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.
`boolean` `isSeekable()` Is this archive writing to a seekable stream (i.e.
`void` `putNextEntry(ZipEntry ze)` 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[] b, int offset, int length)` Writes bytes to ZIP entry.
`void` `write(int b)` Writes a single byte to ZIP entry.
`protected void` `writeCentralDirectoryEnd()` Writes the "End of central dir record"
`protected void` `writeCentralFileHeader(ZipEntry ze)` Writes the central file header entry
`protected void` `writeDataDescriptor(ZipEntry ze)` Writes the data descriptor entry
`protected void` `writeLocalFileHeader(ZipEntry ze)` Writes the local file header entry
`protected void` `writeOut(byte[] data)` Write bytes to output or random access file
`protected void` `writeOut(byte[] data, int offset, int length)` Write bytes to output or random access file

Methods inherited from class java.io.FilterOutputStream
`write`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### def

    protected java.util.zip.Deflater def

  Deflater object for output

  This attribute is only protected to provide a level of API backwards compatibility. This class used to extend `DeflaterOutputStream` up to Revision 1.13.

  Since:
    1.14

### buf

    protected byte[] buf

  Deflater buffer

  This attribute is only protected to provide a level of API backwards compatibility. This class used to extend `DeflaterOutputStream` up to Revision 1.13.

  Since:
    1.14

### 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 out)

  Creates a new ZIP OutputStream filtering the underlying stream.

Since:
  1.1

### ZipOutputStream

    public ZipOutputStream(java.io.File file)
                    throws java.io.IOException

  Creates a new ZIP OutputStream writing to a File. Will use random access if possible.

Since:
  1.14

Method Detail

### isSeekable

    public boolean isSeekable()

  Is this archive writing to a seekable stream (i.e. a random access file)?

  For seekable streams, you don't need to calculate the CRC or uncompressed size for `STORED` entries before invoking `putEntry`.

  Since:
    1.17

### 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.

  Since:
    1.3

### 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

### finish

    public void finish()
                throws java.io.IOException

  Finishs writing the contents and closes this as well as the underlying stream.

    `java.io.IOException`
  Since:
    1.1

### closeEntry

    public void closeEntry()
                    throws java.io.IOException

  Writes all necessary data for this entry.

    `java.io.IOException`
  Since:
    1.1

### putNextEntry

    public void putNextEntry(ZipEntry ze)
                      throws java.io.IOException

  Begin writing next entry.

    `java.io.IOException`
  Since:
    1.1

### setComment

    public void setComment(java.lang.String comment)

  Set the file comment.

  Since:
    1.1

### setLevel

    public void setLevel(int level)

  Sets the compression level for subsequent entries.

  Default is Deflater.DEFAULT_COMPRESSION.

  Since:
    1.1

### setMethod

    public void setMethod(int method)

  Sets the default compression method for subsequent entries.

  Default is DEFLATED.

  Since:
    1.1

### write

    public void write(byte[] b,
                      int offset,
                      int length)
               throws java.io.IOException

  Writes bytes to ZIP entry.

  Overrides:
    `write` in class `java.io.FilterOutputStream`
    `java.io.IOException`

### write

    public void write(int b)
               throws java.io.IOException

  Writes a single byte to ZIP entry.

  Delegates to the three arg method.

  Overrides:
    `write` in class `java.io.FilterOutputStream`
    `java.io.IOException`
  Since:
    1.14

### close

    public void close()
               throws java.io.IOException

  Closes this output stream and releases any system resources associated with the stream.

  Overrides:
    `close` in class `java.io.FilterOutputStream`
  Throws:
    `java.io.IOException` - if an I/O error occurs.
  Since:
    1.14

### flush

    public void flush()
               throws java.io.IOException

  Flushes this output stream and forces any buffered output bytes to be written out to the stream.

  Overrides:
    `flush` in class `java.io.FilterOutputStream`
  Throws:
    `java.io.IOException` - if an I/O error occurs.
  Since:
    1.14

### deflate

    protected final void deflate()
                          throws java.io.IOException

  Writes next block of compressed data to the output stream.

    `java.io.IOException`
  Since:
    1.14

### writeLocalFileHeader

    protected void writeLocalFileHeader(ZipEntry ze)
                                 throws java.io.IOException

  Writes the local file header entry

    `java.io.IOException`
  Since:
    1.1

### writeDataDescriptor

    protected void writeDataDescriptor(ZipEntry ze)
                                throws java.io.IOException

  Writes the data descriptor entry

    `java.io.IOException`
  Since:
    1.1

### writeCentralFileHeader

    protected void writeCentralFileHeader(ZipEntry ze)
                                   throws java.io.IOException

  Writes the central file header entry

    `java.io.IOException`
  Since:
    1.1

### writeCentralDirectoryEnd

    protected void writeCentralDirectoryEnd()
                                     throws java.io.IOException

  Writes the "End of central dir record"

    `java.io.IOException`
  Since:
    1.1

### 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`

  Since:
    1.1

### 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.

    `java.util.zip.ZipException`
  Since:
    1.3

### writeOut

    protected final void writeOut(byte[] data)
                           throws java.io.IOException

  Write bytes to output or random access file

    `java.io.IOException`
  Since:
    1.14

### writeOut

    protected final void writeOut(byte[] data,
                                  int offset,
                                  int length)
                           throws java.io.IOException

  Write bytes to output or random access file

    `java.io.IOException`
  Since:
    1.14

Copyright © 2000-2003 Apache Software Foundation. All Rights Reserved.