org.apache.tools.zip

Class ZipOutputStream


public class ZipOutputStream
extends 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.

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.
protected byte[]
buf
This buffer servers as a Deflater.
protected Deflater
def
This Deflater object is used for output.

Constructor Summary

ZipOutputStream(File file)
Creates a new ZIP OutputStream writing to a File.
ZipOutputStream(OutputStream out)
Creates a new ZIP OutputStream filtering the underlying stream.

Method Summary

protected static long
adjustToLong(int i)
Assumes a negative integer really is a positive integer that has wrapped around and re-creates the original value.
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(String name)
Retrieve the bytes for the given String in the encoding set for this 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
putNextEntry(ZipEntry ze)
Begin writing next entry.
void
setComment(String comment)
Set the file comment.
void
setEncoding(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(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

Field Details

CFH_SIG

protected static final ZipLong CFH_SIG
central file header signature

Since:
1.1


DD_SIG

protected static final ZipLong DD_SIG
data descriptor signature

Since:
1.1


DEFLATED

public static final int DEFLATED
Compression method for deflated entries.

Since:
1.1


EOCD_SIG

protected static final ZipLong EOCD_SIG
end of central dir signature

Since:
1.1


LFH_SIG

protected static final ZipLong LFH_SIG
local file header signature

Since:
1.1


STORED

public static final int STORED
Compression method for deflated entries.

Since:
1.1


buf

protected byte[] buf
This buffer servers as a Deflater.

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


def

protected Deflater def
This Deflater object is used 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

Constructor Details

ZipOutputStream

public ZipOutputStream(File file)
            throws IOException
Creates a new ZIP OutputStream writing to a File. Will use random access if possible.

Since:
1.14


ZipOutputStream

public ZipOutputStream(OutputStream out)
Creates a new ZIP OutputStream filtering the underlying stream.

Since:
1.1

Method Details

adjustToLong

protected static long adjustToLong(int i)
Assumes a negative integer really is a positive integer that has wrapped around and re-creates the original value.

Since:
1.17.2.8


close

public void close()
            throws IOException
Closes this output stream and releases any system resources associated with the stream.

Since:
1.14


closeEntry

public void closeEntry()
            throws IOException
Writes all necessary data for this entry.

Since:
1.1


deflate

protected final void deflate()
            throws IOException
Writes next block of compressed data to the output stream.

Since:
1.14


finish

public void finish()
            throws IOException
Finishs writing the contents and closes this as well as the underlying stream.

Since:
1.1


flush

public void flush()
            throws IOException
Flushes this output stream and forces any buffered output bytes to be written out to the stream.

Since:
1.14


getBytes

protected byte[] getBytes(String name)
            throws ZipException
Retrieve the bytes for the given String in the encoding set for this Stream.

Since:
1.3


getEncoding

public 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


isSeekable

public boolean isSeekable()

Since:
1.17


putNextEntry

public void putNextEntry(ZipEntry ze)
            throws IOException
Begin writing next entry.

Since:
1.1


setComment

public void setComment(String comment)
Set the file comment.

Since:
1.1


setEncoding

public void setEncoding(String encoding)

Since:
1.3


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


toDosTime

protected static ZipLong toDosTime(Date time)
Convert a Date object to a DOS date/time field.

Stolen from InfoZip's fileio.c

Since:
1.1


write

public void write(byte[] b,
                  int offset,
                  int length)
            throws IOException
Writes bytes to ZIP entry.


write

public void write(int b)
            throws IOException
Writes a single byte to ZIP entry.

Delegates to the three arg method.

Since:
1.14


writeCentralDirectoryEnd

protected void writeCentralDirectoryEnd()
            throws IOException
Writes the "End of central dir record"

Since:
1.1


writeCentralFileHeader

protected void writeCentralFileHeader(ZipEntry ze)
            throws IOException
Writes the central file header entry

Since:
1.1


writeDataDescriptor

protected void writeDataDescriptor(ZipEntry ze)
            throws IOException
Writes the data descriptor entry

Since:
1.1


writeLocalFileHeader

protected void writeLocalFileHeader(ZipEntry ze)
            throws IOException
Writes the local file header entry

Since:
1.1


writeOut

protected final void writeOut(byte[] data)
            throws IOException
Write bytes to output or random access file

Since:
1.14


writeOut

protected final void writeOut(byte[] data,
                              int offset,
                              int length)
            throws IOException
Write bytes to output or random access file

Since:
1.14


Copyright B) 2000-2005 Apache Software Foundation. All Rights Reserved.