Class ArchiveOutputStream
java.lang.Object
java.io.OutputStream
org.apache.commons.compress.archivers.ArchiveOutputStream
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
- Direct Known Subclasses:
ArArchiveOutputStream
,CpioArchiveOutputStream
,TarArchiveOutputStream
,ZipArchiveOutputStream
Archive output stream implementations are expected to override the
OutputStream.write(byte[], int, int)
method to improve performance.
They should also override OutputStream.close()
to ensure that any necessary
trailers are added.
The normal sequence of calls when working with ArchiveOutputStreams is:
- Create ArchiveOutputStream object,
- optionally write SFX header (Zip only),
- repeat as needed:
putArchiveEntry(ArchiveEntry)
(writes entry header),OutputStream.write(byte[])
(writes entry data, as often as needed),closeArchiveEntry()
(closes entry),
-
finish()
(ends the addition of entries), - optionally write additional data, provided format supports it,
OutputStream.close()
.
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) static final int
private long
holds the number of bytes written to this streamprivate final byte[]
Temporary buffer used for thewrite(int)
method -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionboolean
canWriteEntryData
(ArchiveEntry archiveEntry) Whether this stream is able to write the given entry.abstract void
Closes the archive entry, writing any trailer information that may be required.protected void
count
(int written) Increments the counter of already written bytes.protected void
count
(long written) Increments the counter of already written bytes.abstract ArchiveEntry
createArchiveEntry
(File inputFile, String entryName) Create an archive entry using the inputFile and entryName provided.createArchiveEntry
(Path inputPath, String entryName, LinkOption... options) Create an archive entry using the inputPath and entryName provided.abstract void
finish()
Finishes the addition of entries to this stream, without closing it.long
Returns the current number of bytes written to this stream.int
getCount()
Deprecated.this method may yield wrong results for large archives, use #getBytesWritten insteadabstract void
putArchiveEntry
(ArchiveEntry entry) Writes the headers for an archive entry to the output stream.void
write
(int b) Writes a byte to the current archive entry.Methods inherited from class java.io.OutputStream
close, flush, write, write
-
Field Details
-
oneByte
private final byte[] oneByteTemporary buffer used for thewrite(int)
method -
BYTE_MASK
static final int BYTE_MASK- See Also:
-
bytesWritten
private long bytesWrittenholds the number of bytes written to this stream
-
-
Constructor Details
-
ArchiveOutputStream
public ArchiveOutputStream()
-
-
Method Details
-
putArchiveEntry
Writes the headers for an archive entry to the output stream. The caller must then write the content to the stream and callcloseArchiveEntry()
to complete the process.- Parameters:
entry
- describes the entry- Throws:
IOException
- if an I/O error occurs
-
closeArchiveEntry
Closes the archive entry, writing any trailer information that may be required.- Throws:
IOException
- if an I/O error occurs
-
finish
Finishes the addition of entries to this stream, without closing it. Additional data can be written, if the format supports it.- Throws:
IOException
- if the user forgets to close the entry.
-
createArchiveEntry
public abstract ArchiveEntry createArchiveEntry(File inputFile, String entryName) throws IOException Create an archive entry using the inputFile and entryName provided.- Parameters:
inputFile
- the file to create the entry fromentryName
- name to use for the entry- Returns:
- the ArchiveEntry set up with details from the file
- Throws:
IOException
- if an I/O error occurs
-
createArchiveEntry
public ArchiveEntry createArchiveEntry(Path inputPath, String entryName, LinkOption... options) throws IOException Create an archive entry using the inputPath and entryName provided. The default implementation calls simply delegates as:return createArchiveEntry(inputFile.toFile(), entryName);
Subclasses should override this method.- Parameters:
inputPath
- the file to create the entry fromentryName
- name to use for the entryoptions
- options indicating how symbolic links are handled.- Returns:
- the ArchiveEntry set up with details from the file
- Throws:
IOException
- if an I/O error occurs- Since:
- 1.21
-
write
Writes a byte to the current archive entry.This method simply calls
write( byte[], 0, 1 )
.MUST be overridden if the
OutputStream.write(byte[], int, int)
method is not overridden; may be overridden otherwise.- Specified by:
write
in classOutputStream
- Parameters:
b
- The byte to be written.- Throws:
IOException
- on error
-
count
protected void count(int written) Increments the counter of already written bytes. Doesn't increment if EOF has been hit (written == -1
).- Parameters:
written
- the number of bytes written
-
count
protected void count(long written) Increments the counter of already written bytes. Doesn't increment if EOF has been hit (written == -1
).- Parameters:
written
- the number of bytes written- Since:
- 1.1
-
getCount
Deprecated.this method may yield wrong results for large archives, use #getBytesWritten insteadReturns the current number of bytes written to this stream.- Returns:
- the number of written bytes
-
getBytesWritten
public long getBytesWritten()Returns the current number of bytes written to this stream.- Returns:
- the number of written bytes
- Since:
- 1.1
-
canWriteEntryData
Whether this stream is able to write the given entry.Some archive formats support variants or details that are not supported (yet).
- Parameters:
archiveEntry
- the entry to test- Returns:
- This implementation always returns true.
- Since:
- 1.1
-