Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.commons.compress.archivers.zip
Class ZipArchiveOutputStream

    java.lang.Object
      java.io.OutputStream
          org.apache.commons.compress.archivers.ArchiveOutputStream
              org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream

All Implemented Interfaces:
  Closeable, Flushable

Direct Known Subclasses:
  JarArchiveOutputStream

    public class ZipArchiveOutputStream

extends ArchiveOutputStream

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 `putArchiveEntry(ArchiveEntry)` can be called.

This class is not thread-safe

Nested Class Summary
`static class` | `ZipArchiveOutputStream.UnicodeExtraFieldPolicy` enum that represents the possible policies for creating Unicode extra fields.

Field Summary
`protected Deflater` | `def` This Deflater object is used for output.
`static int` | `DEFAULT_COMPRESSION` Default compression level for deflated entries.
`static int` | `DEFLATED` Compression method for deflated entries.
`static int` | `EFS_FLAG` Deprecated. use `GeneralPurposeBit.UFT8_NAMES_FLAG` instead
`protected boolean` | `finished` indicates if this archive is finished. protected for use in Jar implementation
`static int` | `STORED` Compression method for stored entries.

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

Method Summary
`boolean` | `canWriteEntryData(ArchiveEntry ae)` Whether this stream is able to write the given entry.
`void` | `close()` Closes this output stream and releases any system resources associated with the stream.
`void` | `closeArchiveEntry()` Writes all necessary data for this entry.
`ArchiveEntry` | `createArchiveEntry(File inputFile, String entryName)` Creates a new zip entry taking some information from the given file and using the provided name.
`protected void` | `deflate()` Writes next block of compressed data to the output stream.
`void` | `finish()` Finishes the addition of entries to this stream, without closing it.
`void` | `flush()` Flushes this output stream and forces any buffered output bytes to be written out to the stream.
`String` | `getEncoding()` The encoding to use for filenames and the file comment.
`boolean` | `isSeekable()` This method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).
`void` | `putArchiveEntry(ArchiveEntry archiveEntry)` Writes the headers for an archive entry to the output stream.
`void` | `setComment(String comment)` Set the file comment.
`void` | `setCreateUnicodeExtraFields(ZipArchiveOutputStream.UnicodeExtraFieldPolicy b)` Whether to create Unicode Extra Fields.
`void` | `setEncoding(String encoding)` The encoding to use for filenames and the file comment.
`void` | `setFallbackToUTF8(boolean b)` Whether to fall back to UTF and the language encoding flag if the file name cannot be encoded using the specified encoding.
`void` | `setLevel(int level)` Sets the compression level for subsequent entries.
`void` | `setMethod(int method)` Sets the default compression method for subsequent entries.
`void` | `setUseLanguageEncodingFlag(boolean b)` Whether to set the language encoding flag if the file name encoding is UTF-8.
`void` | `write(byte[] b, int offset, int length)` Writes bytes to ZIP entry.
`protected void` | `writeCentralDirectoryEnd()` Writes the "End of central dir record".
`protected void` | `writeCentralFileHeader(ZipArchiveEntry ze)` Writes the central file header entry.
`protected void` | `writeDataDescriptor(ZipArchiveEntry ze)` Writes the data descriptor entry.
`protected void` | `writeLocalFileHeader(ZipArchiveEntry 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 org.apache.commons.compress.archivers.ArchiveOutputStream
`count, count, getBytesWritten, getCount, write`

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

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

Field Detail

### finished

    protected boolean finished

  indicates if this archive is finished. protected for use in Jar implementation

### DEFLATED

    public static final int DEFLATED

  Compression method for deflated entries.

  See Also:
    Constant Field Values

### DEFAULT_COMPRESSION

    public static final int DEFAULT_COMPRESSION

  Default compression level for deflated entries.

  See Also:
    Constant Field Values

### STORED

    public static final int STORED

  Compression method for stored entries.

  See Also:
    Constant Field Values

### EFS_FLAG

    public static final int EFS_FLAG

  Deprecated. use `GeneralPurposeBit.UFT8_NAMES_FLAG` instead
  General purpose flag, which indicates that filenames are written in utf-8.

  See Also:
    Constant Field Values

### def

    protected final Deflater def

  This Deflater object is used for output.

Constructor Detail

### ZipArchiveOutputStream

    public ZipArchiveOutputStream(OutputStream out)

  Creates a new ZIP OutputStream filtering the underlying stream.

  Parameters:
    `out` - the outputstream to zip

### ZipArchiveOutputStream

    public ZipArchiveOutputStream(File file)
                           throws IOException

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

  Parameters:
    `file` - the file to zip to
  Throws:
    `IOException` - on error

Method Detail

### isSeekable

    public boolean isSeekable()

  This method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).

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

  Returns:
    true if seekable

### setEncoding

    public void setEncoding(String encoding)

  The encoding to use for filenames and the file comment.

  For a list of possible values see http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html. Defaults to UTF-8.

  Parameters:
    `encoding` - the encoding to use for file names, use null for the platform's default encoding

### getEncoding

    public String getEncoding()

  The encoding to use for filenames and the file comment.

  Returns:
    null if using the platform's default character encoding.

### setUseLanguageEncodingFlag

    public void setUseLanguageEncodingFlag(boolean b)

  Whether to set the language encoding flag if the file name encoding is UTF-8.

  Defaults to true.

### setCreateUnicodeExtraFields

    public void setCreateUnicodeExtraFields(ZipArchiveOutputStream.UnicodeExtraFieldPolicy b)

  Whether to create Unicode Extra Fields.

  Defaults to NEVER.

### setFallbackToUTF8

    public void setFallbackToUTF8(boolean b)

  Whether to fall back to UTF and the language encoding flag if the file name cannot be encoded using the specified encoding.

  Defaults to false.

### finish

    public void finish()
                throws IOException

  Finishes the addition of entries to this stream, without closing it. Additional data can be written, if the format supports it. The finish() method throws an Exception if the user forgets to close the entry .

  Specified by:
    `finish` in class `ArchiveOutputStream`
  Throws:
    `IOException`

### closeArchiveEntry

    public void closeArchiveEntry()
                           throws IOException

  Writes all necessary data for this entry.

  Specified by:
    `closeArchiveEntry` in class `ArchiveOutputStream`
  Throws:
    `IOException` - on error

### putArchiveEntry

    public void putArchiveEntry(ArchiveEntry archiveEntry)
                         throws IOException

  Writes the headers for an archive entry to the output stream. The caller must then write the content to the stream and call `ArchiveOutputStream.closeArchiveEntry()` to complete the process.

  Specified by:
    `putArchiveEntry` in class `ArchiveOutputStream`
  Parameters:
    `archiveEntry` - describes the entry
  Throws:
    `ClassCastException` - if entry is not an instance of ZipArchiveEntry
    `IOException`

### setComment

    public void setComment(String comment)

  Set the file comment.

  Parameters:
    `comment` - the comment

### setLevel

    public void setLevel(int level)

  Sets the compression level for subsequent entries.

  Default is Deflater.DEFAULT_COMPRESSION.

  Parameters:
    `level` - the compression level.
  Throws:
    `IllegalArgumentException` - if an invalid compression level is specified.

### setMethod

    public void setMethod(int method)

  Sets the default compression method for subsequent entries.

  Default is DEFLATED.

  Parameters:
    `method` - an `int` from java.util.zip.ZipEntry

### canWriteEntryData

    public boolean canWriteEntryData(ArchiveEntry ae)

  Whether this stream is able to write the given entry.

  May return false if it is set up to use encryption or a compression method that hasn't been implemented yet.

  Overrides:
    `canWriteEntryData` in class `ArchiveOutputStream`
  Since:
    Apache Commons Compress 1.1

### write

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

  Writes bytes to ZIP entry.

  Overrides:
    `write` in class `OutputStream`
  Parameters:
    `b` - the byte array to write
    `offset` - the start position to write from
    `length` - the number of bytes to write
  Throws:
    `IOException` - on error

### close

    public void close()
               throws IOException

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

  Specified by:
    `close` in interface `Closeable`
  Overrides:
    `close` in class `OutputStream`
  Throws:
    `IOException` - if an I/O error occurs.

### flush

    public void flush()
               throws IOException

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

  Specified by:
    `flush` in interface `Flushable`
  Overrides:
    `flush` in class `OutputStream`
  Throws:
    `IOException` - if an I/O error occurs.

### deflate

    protected final void deflate()
                          throws IOException

  Writes next block of compressed data to the output stream.

  Throws:
    `IOException` - on error

### writeLocalFileHeader

    protected void writeLocalFileHeader(ZipArchiveEntry ze)
                                 throws IOException

  Writes the local file header entry

  Parameters:
    `ze` - the entry to write
  Throws:
    `IOException` - on error

### writeDataDescriptor

    protected void writeDataDescriptor(ZipArchiveEntry ze)
                                throws IOException

  Writes the data descriptor entry.

  Parameters:
    `ze` - the entry to write
  Throws:
    `IOException` - on error

### writeCentralFileHeader

    protected void writeCentralFileHeader(ZipArchiveEntry ze)
                                   throws IOException

  Writes the central file header entry.

  Parameters:
    `ze` - the entry to write
  Throws:
    `IOException` - on error

### writeCentralDirectoryEnd

    protected void writeCentralDirectoryEnd()
                                     throws IOException

  Writes the "End of central dir record".

  Throws:
    `IOException` - on error

### writeOut

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

  Write bytes to output or random access file.

  Parameters:
    `data` - the byte array to write
  Throws:
    `IOException` - on error

### writeOut

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

  Write bytes to output or random access file.

  Parameters:
    `data` - the byte array to write
    `offset` - the start position to write from
    `length` - the number of bytes to write
  Throws:
    `IOException` - on error

### createArchiveEntry

    public ArchiveEntry createArchiveEntry(File inputFile,
                                           String entryName)
                                    throws IOException

  Creates a new zip entry taking some information from the given file and using the provided name.

  The name will be adjusted to end with a forward slash "/" if the file is a directory. If the file is not a directory a potential trailing forward slash will be stripped from the entry name.

  Must not be used if the stream has already been closed.

  Specified by:
    `createArchiveEntry` in class `ArchiveOutputStream`
  Returns:
    the ArchiveEntry set up with details from the file
  Throws:
    `IOException`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2010 The Apache Software Foundation. All Rights Reserved.