public class SevenZFile extends Object implements Closeable
The 7z file format is a flexible container that can contain many compression and encryption types, but at the moment only only Copy, LZMA, LZMA2, BZIP2, Deflate and AES-256 + SHA-256 are supported.
The format is very Windows/Intel specific, so it uses little-endian byte order, doesn't store user/group or permission bits, and represents times using NTFS timestamps (100 nanosecond units since 1 January 1601). Hence the official tools recommend against using it for backup purposes on *nix, and recommend .tar.7z or .tar.lzma or .tar.xz instead.
Both the header and file contents may be compressed and/or encrypted. With both encrypted, neither file names nor file contents can be read, but the use of encryption isn't plausibly deniable.
Multi volume archives can be read by concatenating the parts in correct order - either manually or by using {link org.apache.commons.compress.utils.MultiReadOnlySeekableByteChannel} for example.
Constructor and Description |
---|
SevenZFile(File fileName)
Reads a file as unencrypted 7z archive
|
SevenZFile(File fileName,
byte[] password)
Deprecated.
use the char[]-arg version for the password instead
|
SevenZFile(File fileName,
char[] password)
Reads a file as 7z archive
|
SevenZFile(File fileName,
char[] password,
SevenZFileOptions options)
Reads a file as 7z archive with additional options.
|
SevenZFile(File fileName,
SevenZFileOptions options)
Reads a file as unencrypted 7z archive
|
SevenZFile(SeekableByteChannel channel)
Reads a SeekableByteChannel as 7z archive
|
SevenZFile(SeekableByteChannel channel,
byte[] password)
Deprecated.
use the char[]-arg version for the password instead
|
SevenZFile(SeekableByteChannel channel,
char[] password)
Reads a SeekableByteChannel as 7z archive
|
SevenZFile(SeekableByteChannel channel,
char[] password,
SevenZFileOptions options)
Reads a SeekableByteChannel as 7z archive with additional options.
|
SevenZFile(SeekableByteChannel channel,
SevenZFileOptions options)
Reads a SeekableByteChannel as 7z archive with addtional options.
|
SevenZFile(SeekableByteChannel channel,
String fileName)
Reads a SeekableByteChannel as 7z archive
|
SevenZFile(SeekableByteChannel channel,
String fileName,
byte[] password)
Deprecated.
use the char[]-arg version for the password instead
|
SevenZFile(SeekableByteChannel channel,
String fileName,
char[] password)
Reads a SeekableByteChannel as 7z archive
|
SevenZFile(SeekableByteChannel channel,
String fileName,
char[] password,
SevenZFileOptions options)
Reads a SeekableByteChannel as 7z archive with addtional options.
|
SevenZFile(SeekableByteChannel channel,
String fileName,
SevenZFileOptions options)
Reads a SeekableByteChannel as 7z archive with additional options.
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Closes the archive.
|
String |
getDefaultName()
Derives a default file name from the archive name - if known.
|
Iterable<SevenZArchiveEntry> |
getEntries()
Returns meta-data of all archive entries.
|
InputStream |
getInputStream(SevenZArchiveEntry entry)
Returns an InputStream for reading the contents of the given entry.
|
SevenZArchiveEntry |
getNextEntry()
Returns the next Archive Entry in this archive.
|
InputStreamStatistics |
getStatisticsForCurrentEntry()
Provides statistics for bytes read from the current entry.
|
static boolean |
matches(byte[] signature,
int length)
Checks if the signature matches what is expected for a 7z file.
|
int |
read()
Reads a byte of data.
|
int |
read(byte[] b)
Reads data into an array of bytes.
|
int |
read(byte[] b,
int off,
int len)
Reads data into an array of bytes.
|
String |
toString() |
public SevenZFile(File fileName, char[] password) throws IOException
fileName
- the file to readpassword
- optional password if the archive is encryptedIOException
- if reading the archive failspublic SevenZFile(File fileName, char[] password, SevenZFileOptions options) throws IOException
fileName
- the file to readpassword
- optional password if the archive is encryptedoptions
- the options to applyIOException
- if reading the archive fails or the memory limit (if set) is too small@Deprecated public SevenZFile(File fileName, byte[] password) throws IOException
fileName
- the file to readpassword
- optional password if the archive is encrypted -
the byte array is supposed to be the UTF16-LE encoded
representation of the password.IOException
- if reading the archive failspublic SevenZFile(SeekableByteChannel channel) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readIOException
- if reading the archive failspublic SevenZFile(SeekableByteChannel channel, SevenZFileOptions options) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readoptions
- the options to applyIOException
- if reading the archive fails or the memory limit (if set) is too smallpublic SevenZFile(SeekableByteChannel channel, char[] password) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readpassword
- optional password if the archive is encryptedIOException
- if reading the archive failspublic SevenZFile(SeekableByteChannel channel, char[] password, SevenZFileOptions options) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readpassword
- optional password if the archive is encryptedoptions
- the options to applyIOException
- if reading the archive fails or the memory limit (if set) is too smallpublic SevenZFile(SeekableByteChannel channel, String fileName, char[] password) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readfileName
- name of the archive - only used for error reportingpassword
- optional password if the archive is encryptedIOException
- if reading the archive failspublic SevenZFile(SeekableByteChannel channel, String fileName, char[] password, SevenZFileOptions options) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readfileName
- name of the archive - only used for error reportingpassword
- optional password if the archive is encryptedoptions
- the options to applyIOException
- if reading the archive fails or the memory limit (if set) is too smallpublic SevenZFile(SeekableByteChannel channel, String fileName) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readfileName
- name of the archive - only used for error reportingIOException
- if reading the archive failspublic SevenZFile(SeekableByteChannel channel, String fileName, SevenZFileOptions options) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readfileName
- name of the archive - only used for error reportingoptions
- the options to applyIOException
- if reading the archive fails or the memory limit (if set) is too small@Deprecated public SevenZFile(SeekableByteChannel channel, byte[] password) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readpassword
- optional password if the archive is encrypted -
the byte array is supposed to be the UTF16-LE encoded
representation of the password.IOException
- if reading the archive fails@Deprecated public SevenZFile(SeekableByteChannel channel, String fileName, byte[] password) throws IOException
SeekableInMemoryByteChannel
allows you to read from an in-memory archive.
channel
- the channel to readfileName
- name of the archive - only used for error reportingpassword
- optional password if the archive is encrypted -
the byte array is supposed to be the UTF16-LE encoded
representation of the password.IOException
- if reading the archive failspublic SevenZFile(File fileName) throws IOException
fileName
- the file to readIOException
- if reading the archive failspublic SevenZFile(File fileName, SevenZFileOptions options) throws IOException
fileName
- the file to readoptions
- the options to applyIOException
- if reading the archive fails or the memory limit (if set) is too smallpublic void close() throws IOException
close
in interface Closeable
close
in interface AutoCloseable
IOException
- if closing the file failspublic SevenZArchiveEntry getNextEntry() throws IOException
null
if there are no more entriesIOException
- if the next entry could not be readpublic Iterable<SevenZArchiveEntry> getEntries()
This method only provides meta-data, the entries can not be
used to read the contents, you still need to process all
entries in order using getNextEntry()
for that.
The content methods are only available for entries that have
already been reached via getNextEntry()
.
public int read() throws IOException
IOException
- if an I/O error has occurredpublic InputStream getInputStream(SevenZArchiveEntry entry) throws IOException
For archives using solid compression randomly accessing entries will be significantly slower than reading the archive sequentiallly.
entry
- the entry to get the stream for.IOException
- if unable to create an input stream from the zipentrypublic int read(byte[] b) throws IOException
b
- the array to write data toIOException
- if an I/O error has occurredpublic int read(byte[] b, int off, int len) throws IOException
b
- the array to write data tooff
- offset into the buffer to start filling atlen
- of bytes to readIOException
- if an I/O error has occurredpublic InputStreamStatistics getStatisticsForCurrentEntry()
public static boolean matches(byte[] signature, int length)
signature
- the bytes to checklength
- the number of bytes to checkpublic String getDefaultName()
This implements the same heuristics the 7z tools use. In
7z's case if an archive contains entries without a name -
i.e. SevenZArchiveEntry.getName()
returns null
-
then its command line and GUI tools will use this default name
when extracting the entries.
~
character is
appended to the archive name.Copyright © 2020 The Apache Software Foundation. All rights reserved.