Class ArchiveOutputStream<E extends ArchiveEntry>
- java.lang.Object
-
- java.io.OutputStream
-
- org.apache.commons.compress.archivers.ArchiveOutputStream<E>
-
- Type Parameters:
E
- The type ofArchiveEntry
consumed.
- All Implemented Interfaces:
java.io.Closeable
,java.io.Flushable
,java.lang.AutoCloseable
- Direct Known Subclasses:
ArArchiveOutputStream
,CpioArchiveOutputStream
,TarArchiveOutputStream
,ZipArchiveOutputStream
public abstract class ArchiveOutputStream<E extends ArchiveEntry> extends java.io.OutputStream
Archive output stream implementations are expected to override theOutputStream.write(byte[], int, int)
method to improve performance. They should also overrideOutputStream.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()
.
-
-
Constructor Summary
Constructors Constructor Description ArchiveOutputStream()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description boolean
canWriteEntryData(ArchiveEntry archiveEntry)
Whether this stream is able to write the given entry.abstract void
closeArchiveEntry()
Closes the archive entry, writing any trailer information that may be required.abstract E
createArchiveEntry(java.io.File inputFile, java.lang.String entryName)
Creates an archive entry using the inputFile and entryName provided.E
createArchiveEntry(java.nio.file.Path inputPath, java.lang.String entryName, java.nio.file.LinkOption... options)
Creates an archive entry using the inputPath and entryName provided.abstract void
finish()
Finishes the addition of entries to this stream, without closing it.long
getBytesWritten()
Gets 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(E entry)
Writes the headers for an archive entry to the output stream.void
write(int b)
Writes a byte to the current archive entry.
-
-
-
Method Detail
-
canWriteEntryData
public boolean canWriteEntryData(ArchiveEntry archiveEntry)
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
-
closeArchiveEntry
public abstract void closeArchiveEntry() throws java.io.IOException
Closes the archive entry, writing any trailer information that may be required.- Throws:
java.io.IOException
- if an I/O error occurs
-
createArchiveEntry
public abstract E createArchiveEntry(java.io.File inputFile, java.lang.String entryName) throws java.io.IOException
Creates 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:
java.io.IOException
- if an I/O error occurs
-
createArchiveEntry
public E createArchiveEntry(java.nio.file.Path inputPath, java.lang.String entryName, java.nio.file.LinkOption... options) throws java.io.IOException
Creates 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:
java.io.IOException
- if an I/O error occurs- Since:
- 1.21
-
finish
public abstract void finish() throws java.io.IOException
Finishes the addition of entries to this stream, without closing it. Additional data can be written, if the format supports it.- Throws:
java.io.IOException
- if the user forgets to close the entry.
-
getBytesWritten
public long getBytesWritten()
Gets the current number of bytes written to this stream.- Returns:
- the number of written bytes
- Since:
- 1.1
-
getCount
@Deprecated public int getCount()
Deprecated.this method may yield wrong results for large archives, use #getBytesWritten insteadGets the current number of bytes written to this stream.- Returns:
- the number of written bytes
-
putArchiveEntry
public abstract void putArchiveEntry(E entry) throws java.io.IOException
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:
java.io.IOException
- if an I/O error occurs
-
write
public void write(int b) throws java.io.IOException
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 classjava.io.OutputStream
- Parameters:
b
- The byte to be written.- Throws:
java.io.IOException
- on error
-
-