Class CpioArchiveOutputStream
java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
org.apache.commons.compress.archivers.ArchiveOutputStream<CpioArchiveEntry>
org.apache.commons.compress.archivers.cpio.CpioArchiveOutputStream
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable,CpioConstants
public class CpioArchiveOutputStream
extends ArchiveOutputStream<CpioArchiveEntry>
implements CpioConstants
CpioArchiveOutputStream is a stream for writing CPIO streams. All formats of CPIO are supported (old ASCII, old binary, new portable format and the new
portable format with CRC).
An entry can be written by creating an instance of CpioArchiveEntry and fill it with the necessary values and put it into the CPIO stream. Afterwards write the contents of the file into the CPIO stream. Either close the stream by calling finish() or put a next entry into the cpio stream.
CpioArchiveOutputStream out = new CpioArchiveOutputStream(
new FileOutputStream(new File("test.cpio")));
CpioArchiveEntry entry = new CpioArchiveEntry();
entry.setName("testfile");
String contents = "12345";
entry.setFileSize(contents.length());
entry.setMode(CpioConstants.C_ISREG); // regular file
... set other attributes, e.g. time, number of links
out.putArchiveEntry(entry);
out.write(testContents.getBytes());
out.close();
Note: This implementation should be compatible to cpio 2.5
This class uses mutable fields and is not considered threadsafe.
based on code from the jRPM project (jrpm.sourceforge.net)
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final int(package private) final Stringprivate longprivate CpioArchiveEntryprivate final shortSeeCpioArchiveEntry(short)for possible values.private final HashMap<String, CpioArchiveEntry> private longprivate longprivate final ZipEncodingThe encoding to use for file names and labels.Fields inherited from class java.io.FilterOutputStream
outFields inherited from interface org.apache.commons.compress.archivers.cpio.CpioConstants
BLOCK_SIZE, C_IRGRP, C_IROTH, C_IRUSR, C_ISBLK, C_ISCHR, C_ISDIR, C_ISFIFO, C_ISGID, C_ISLNK, C_ISNWK, C_ISREG, C_ISSOCK, C_ISUID, C_ISVTX, C_IWGRP, C_IWOTH, C_IWUSR, C_IXGRP, C_IXOTH, C_IXUSR, CPIO_TRAILER, FORMAT_NEW, FORMAT_NEW_CRC, FORMAT_NEW_MASK, FORMAT_OLD_ASCII, FORMAT_OLD_BINARY, FORMAT_OLD_MASK, MAGIC_NEW, MAGIC_NEW_CRC, MAGIC_OLD_ASCII, MAGIC_OLD_BINARY, S_IFMT -
Constructor Summary
ConstructorsConstructorDescriptionConstructs the cpio output stream.CpioArchiveOutputStream(OutputStream out, short format) Constructs the cpio output stream with a specified format, a blocksize ofBLOCK_SIZEand using ASCII as the file name encoding.CpioArchiveOutputStream(OutputStream out, short format, int blockSize) Constructs the cpio output stream with a specified format using ASCII as the file name encoding.CpioArchiveOutputStream(OutputStream out, short format, int blockSize, String encoding) Constructs the cpio output stream with a specified format using ASCII as the file name encoding.CpioArchiveOutputStream(OutputStream out, String encoding) Constructs the cpio output stream. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Closes the CPIO output stream as well as the stream being filtered.voidCloses the archive entry, writing any trailer information that may be required.createArchiveEntry(File inputFile, String entryName) Creates a new CpioArchiveEntry.createArchiveEntry(Path inputPath, String entryName, LinkOption... options) Creates a new CpioArchiveEntry.private byte[]Encodes the given string using the configured encoding.voidfinish()Finishes writing the contents of the CPIO output stream without closing the underlying stream.private voidpad(int count) voidputArchiveEntry(CpioArchiveEntry entry) Begins writing a new CPIO file entry and positions the stream to the start of the entry data.voidwrite(byte[] b, int off, int len) Writes an array of bytes to the current CPIO entry data.private voidwriteAsciiLong(long number, int length, int radix) private voidwriteBinaryLong(long number, int length, boolean swapHalfWord) private voidwriteCString(byte[] str) Writes an encoded string to the stream followed by \0private voidprivate voidwriteNewEntry(CpioArchiveEntry entry) private voidprivate voidwriteOldBinaryEntry(CpioArchiveEntry entry, boolean swapHalfWord) Methods inherited from class org.apache.commons.compress.archivers.ArchiveOutputStream
canWriteEntryData, checkFinished, checkOpen, count, count, getBytesWritten, getCount, isClosed, isFinished, writeMethods inherited from class java.io.FilterOutputStream
flush, write
-
Field Details
-
entry
-
entryFormat
private final short entryFormatSeeCpioArchiveEntry(short)for possible values. -
names
-
crc
private long crc -
written
private long written -
blockSize
private final int blockSize -
nextArtificalDeviceAndInode
private long nextArtificalDeviceAndInode -
zipEncoding
The encoding to use for file names and labels. -
charsetName
-
-
Constructor Details
-
CpioArchiveOutputStream
Constructs the cpio output stream. The format for this CPIO stream is the "new" format using ASCII encoding for file names- Parameters:
out- The cpio stream
-
CpioArchiveOutputStream
Constructs the cpio output stream with a specified format, a blocksize ofBLOCK_SIZEand using ASCII as the file name encoding.- Parameters:
out- The cpio streamformat- The format of the stream
-
CpioArchiveOutputStream
Constructs the cpio output stream with a specified format using ASCII as the file name encoding.- Parameters:
out- The cpio streamformat- The format of the streamblockSize- The block size of the archive.- Since:
- 1.1
-
CpioArchiveOutputStream
Constructs the cpio output stream with a specified format using ASCII as the file name encoding.- Parameters:
out- The cpio streamformat- The format of the streamblockSize- The block size of the archive.encoding- The encoding of file names to write - use null for the platform's default.- Since:
- 1.6
-
CpioArchiveOutputStream
Constructs the cpio output stream. The format for this CPIO stream is the "new" format.- Parameters:
out- The cpio streamencoding- The encoding of file names to write - use null for the platform's default.- Since:
- 1.6
-
-
Method Details
-
close
Closes the CPIO output stream as well as the stream being filtered.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classArchiveOutputStream<CpioArchiveEntry>- Throws:
IOException- if an I/O error has occurred or if a CPIO file error has occurred
-
closeArchiveEntry
Description copied from class:ArchiveOutputStreamCloses the archive entry, writing any trailer information that may be required.- Specified by:
closeArchiveEntryin classArchiveOutputStream<CpioArchiveEntry>- Throws:
IOException- if an I/O error occurs
-
createArchiveEntry
Creates a new CpioArchiveEntry. The entryName must be an ASCII encoded string.- Specified by:
createArchiveEntryin classArchiveOutputStream<CpioArchiveEntry>- 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- See Also:
-
createArchiveEntry
public CpioArchiveEntry createArchiveEntry(Path inputPath, String entryName, LinkOption... options) throws IOException Creates a new CpioArchiveEntry. The entryName must be an ASCII encoded string.- Overrides:
createArchiveEntryin classArchiveOutputStream<CpioArchiveEntry>- 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- See Also:
-
encode
Encodes the given string using the configured encoding.- Parameters:
str- the String to write- Returns:
- result of encoding the string
- Throws:
IOException- if the string couldn't be written
-
finish
Finishes writing the contents of the CPIO output stream without closing the underlying stream. Use this method when applying multiple filters in succession to the same output stream.- Overrides:
finishin classArchiveOutputStream<CpioArchiveEntry>- Throws:
IOException- if an I/O exception has occurred or if a CPIO file error has occurred
-
pad
- Throws:
IOException
-
putArchiveEntry
Begins writing a new CPIO file entry and positions the stream to the start of the entry data. Closes the current entry if still active. The current time will be used if the entry has no set modification time and the default header format will be used if no other format is specified in the entry.- Specified by:
putArchiveEntryin classArchiveOutputStream<CpioArchiveEntry>- Parameters:
entry- the CPIO cpioEntry to be written- Throws:
IOException- if an I/O error has occurred or if a CPIO file error has occurredClassCastException- if entry is not an instance of CpioArchiveEntry
-
write
Writes an array of bytes to the current CPIO entry data. This method will block until all the bytes are written.- Overrides:
writein classFilterOutputStream- Parameters:
b- the data to be writtenoff- the start offset in the datalen- the number of bytes that are written- Throws:
IOException- if an I/O error has occurred or if a CPIO file error has occurred
-
writeAsciiLong
- Throws:
IOException
-
writeBinaryLong
- Throws:
IOException
-
writeCString
Writes an encoded string to the stream followed by \0- Parameters:
str- the String to write- Throws:
IOException- if the string couldn't be written
-
writeHeader
- Throws:
IOException
-
writeNewEntry
- Throws:
IOException
-
writeOldAsciiEntry
- Throws:
IOException
-
writeOldBinaryEntry
- Throws:
IOException
-