java.lang.Object
kala.compress.archivers.ArchiveStreamFactory
- All Implemented Interfaces:
ArchiveStreamProvider
Creates an Archive[In|Out]putStreams from names or the first bytes of the InputStream. In order to add other implementations, you should extend
ArchiveStreamFactory and override the appropriate methods (and call their implementation from super of course).
Compressing a ZIP-File:
final OutputStream out = Files.newOutputStream(output.toPath());
ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);
os.putArchiveEntry(new ZipArchiveEntry("testdata/test1.xml"));
IOUtils.copy(Files.newInputStream(file1.toPath()), os);
os.closeArchiveEntry();
os.putArchiveEntry(new ZipArchiveEntry("testdata/test2.xml"));
IOUtils.copy(Files.newInputStream(file2.toPath()), os);
os.closeArchiveEntry();
os.close();
Decompressing a ZIP-File:
final InputStream is = Files.newInputStream(input.toPath()); ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.ZIP, is); ZipArchiveEntry entry = (ZipArchiveEntry) in.getNextEntry(); OutputStream out = Files.newOutputStream(dir.toPath().resolve(entry.getName())); IOUtils.copy(in, out); out.close(); in.close();
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classThis is an internal class and should not be used directly. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringConstant (value "apk") used to identify the APK archive format.static final StringConstant (value "apkm") used to identify the APKM archive format.static final StringConstant (value "apks") used to identify the APKS archive format.static final StringConstant (value "ar") used to identify the AR archive format.private final SortedMap<String, ArchiveStreamProvider> private final SortedMap<String, ArchiveStreamProvider> static final StringConstant (value "arj") used to identify the ARJ archive format.private static final Map<String, ArchiveStreamFactory.BuiltinArchiver> static final StringConstant (value "cpio") used to identify the CPIO archive format.static final ArchiveStreamFactoryThe singleton instance using the UTF-8.static final StringConstant (value "dump") used to identify the UNIX DUMP archive format.private static final ArchiveStreamFactory.BuiltinArchiverprivate static final intprivate final CharsetEntry encoding, null for the default.static final StringConstant (value "jar") used to identify the JAR archive format.static final StringConstant (value "7z") used to identify the 7z archive format.private static final intstatic final StringConstant used to identify the TAR archive format.private static final ArchiveStreamFactory.BuiltinArchiverprivate static final intstatic final StringConstant (value "xapk") used to identify the XAPK archive format.static final StringConstant (value "zip") used to identify the ZIP archive format. -
Constructor Summary
ConstructorsConstructorDescriptionConstructs an instance using the archiver default encoding.ArchiveStreamFactory(@Nullable Charset entryEncoding) Constructs an instance using the specified encoding. -
Method Summary
Modifier and TypeMethodDescription<I extends ArchiveInputStream<? extends ArchiveEntry>>
ICreates an archive input stream from an input stream, autodetecting the archive type from the first few bytes of the stream.<I extends ArchiveInputStream<? extends ArchiveEntry>>
IcreateArchiveInputStream(String archiverName, InputStream in) Creates an archive input stream from an archiver name and an input stream.<I extends ArchiveInputStream<? extends ArchiveEntry>>
IcreateArchiveInputStream(String archiverName, InputStream in, Charset actualEncoding) Creates an archive input stream from an archiver name and an input stream.<O extends ArchiveOutputStream<? extends ArchiveEntry>>
OcreateArchiveOutputStream(String archiverName, OutputStream out) Creates an archive output stream from an archiver name and an output stream.<O extends ArchiveOutputStream<? extends ArchiveEntry>>
OcreateArchiveOutputStream(String archiverName, OutputStream out, Charset actualEncoding) Creates an archive output stream from an archiver name and an output stream.static Stringdetect(InputStream in) Try to determine the type of ArchiverGets an unmodifiable sorted map from input stream provider names to provider objects.Gets an unmodifiable sorted map from output stream provider names to provider objects.Gets the encoding to use for arj, jar, ZIP, dump, cpio and tar files, or null for the archiver default.Gets all the input stream archive names for this providerGets all the output stream archive names for this providerprivate static ArchiveStreamFactory.BuiltinArchiverloadArchiver(List<ArchiveStreamFactory.BuiltinArchiver> archivers, String className) private static StringwithInstalledProviders(ClassLoader classLoader) withProviders(Iterable<? extends ArchiveStreamProvider> providers)
-
Field Details
-
TAR_HEADER_SIZE
private static final int TAR_HEADER_SIZE- See Also:
-
DUMP_SIGNATURE_SIZE
private static final int DUMP_SIGNATURE_SIZE- See Also:
-
SIGNATURE_SIZE
private static final int SIGNATURE_SIZE- See Also:
-
APK
Constant (value "apk") used to identify the APK archive format.APK file extensions are .apk, .xapk, .apks, .apkm
- Since:
- 1.22
- See Also:
-
XAPK
Constant (value "xapk") used to identify the XAPK archive format.APK file extensions are .apk, .xapk, .apks, .apkm
- Since:
- 1.22
- See Also:
-
APKS
Constant (value "apks") used to identify the APKS archive format.APK file extensions are .apk, .xapk, .apks, .apkm
- Since:
- 1.22
- See Also:
-
APKM
Constant (value "apkm") used to identify the APKM archive format.APK file extensions are .apk, .xapk, .apks, .apkm
- Since:
- 1.22
- See Also:
-
AR
Constant (value "ar") used to identify the AR archive format.- Since:
- 1.1
- See Also:
-
ARJ
Constant (value "arj") used to identify the ARJ archive format. Not supported as an output stream type.- Since:
- 1.6
- See Also:
-
CPIO
Constant (value "cpio") used to identify the CPIO archive format.- Since:
- 1.1
- See Also:
-
DUMP
Constant (value "dump") used to identify the UNIX DUMP archive format. Not supported as an output stream type.- Since:
- 1.3
- See Also:
-
JAR
Constant (value "jar") used to identify the JAR archive format.- Since:
- 1.1
- See Also:
-
TAR
Constant used to identify the TAR archive format.- Since:
- 1.1
- See Also:
-
ZIP
Constant (value "zip") used to identify the ZIP archive format.- Since:
- 1.1
- See Also:
-
SEVEN_Z
Constant (value "7z") used to identify the 7z archive format.- Since:
- 1.8
- See Also:
-
BUILTIN_ARCHIVERS
-
ALL_NAMES
-
OUTPUT_NAMES
-
TAR_ARCHIVER
-
DUMP_ARCHIVER
-
DEFAULT
The singleton instance using the UTF-8.- Since:
- 1.21
-
entryEncoding
Entry encoding, null for the default. -
archiveInputStreamProviders
-
archiveOutputStreamProviders
-
inputStreamArchiveNames
-
outputStreamArchiveNames
-
-
Constructor Details
-
ArchiveStreamFactory
public ArchiveStreamFactory()Constructs an instance using the archiver default encoding. -
ArchiveStreamFactory
Constructs an instance using the specified encoding.- Parameters:
entryEncoding- the encoding to be used.- Since:
- 1.27.1-0
-
-
Method Details
-
loadArchiver
private static ArchiveStreamFactory.BuiltinArchiver loadArchiver(List<ArchiveStreamFactory.BuiltinArchiver> archivers, String className) -
detect
Try to determine the type of Archiver- Parameters:
in- input stream- Returns:
- type of archiver if found
- Throws:
ArchiveException- if an archiver cannot be detected in the stream- Since:
- 1.14
-
toKey
-
createArchiveInputStream
public <I extends ArchiveInputStream<? extends ArchiveEntry>> I createArchiveInputStream(InputStream in) throws ArchiveException Creates an archive input stream from an input stream, autodetecting the archive type from the first few bytes of the stream. The InputStream must support marks, like BufferedInputStream.- Type Parameters:
I- TheArchiveInputStreamtype.- Parameters:
in- the input stream- Returns:
- the archive input stream
- Throws:
ArchiveException- if the archiver name is not knownStreamingNotSupportedException- if the format cannot be read from a streamIllegalArgumentException- if the stream is null or does not support mark
-
createArchiveInputStream
public <I extends ArchiveInputStream<? extends ArchiveEntry>> I createArchiveInputStream(String archiverName, InputStream in) throws ArchiveException Creates an archive input stream from an archiver name and an input stream.- Type Parameters:
I- TheArchiveInputStreamtype.- Parameters:
archiverName- the archive name, i.e. "ar", "arj", "zip", "tar", "jar", "cpio", "dump" or "7z"in- the input stream- Returns:
- the archive input stream
- Throws:
ArchiveException- if the archiver name is not knownStreamingNotSupportedException- if the format cannot be read from a streamIllegalArgumentException- if the archiver name or stream is null
-
createArchiveInputStream
public <I extends ArchiveInputStream<? extends ArchiveEntry>> I createArchiveInputStream(String archiverName, InputStream in, Charset actualEncoding) throws ArchiveException Description copied from interface:ArchiveStreamProviderCreates an archive input stream from an archiver name and an input stream.- Specified by:
createArchiveInputStreamin interfaceArchiveStreamProvider- Type Parameters:
I- TheArchiveInputStreamtype.- Parameters:
archiverName- the archiver name, i.e. "ar", "arj", "zip", "tar", "jar", "cpio", "dump" or "7z"in- the input streamactualEncoding- encoding name or null for the default- Returns:
- the archive input stream
- Throws:
ArchiveException- if the archiver name is not known
-
createArchiveOutputStream
public <O extends ArchiveOutputStream<? extends ArchiveEntry>> O createArchiveOutputStream(String archiverName, OutputStream out) throws ArchiveException Creates an archive output stream from an archiver name and an output stream.- Type Parameters:
O- TheArchiveOutputStreamtype.- Parameters:
archiverName- the archive name, i.e. "ar", "zip", "tar", "jar" or "cpio"out- the output stream- Returns:
- the archive output stream
- Throws:
ArchiveException- if the archiver name is not knownStreamingNotSupportedException- if the format cannot be written to a streamIllegalArgumentException- if the archiver name or stream is null
-
createArchiveOutputStream
public <O extends ArchiveOutputStream<? extends ArchiveEntry>> O createArchiveOutputStream(String archiverName, OutputStream out, Charset actualEncoding) throws ArchiveException Description copied from interface:ArchiveStreamProviderCreates an archive output stream from an archiver name and an output stream.- Specified by:
createArchiveOutputStreamin interfaceArchiveStreamProvider- Type Parameters:
O- TheArchiveInputStreamtype.- Parameters:
archiverName- the archiver name, i.e. "ar", "zip", "tar", "jar" or "cpio"out- the output streamactualEncoding- encoding name or null for the default- Returns:
- the archive output stream
- Throws:
ArchiveException- if the archiver name is not known
-
getArchiveInputStreamProviders
Gets an unmodifiable sorted map from input stream provider names to provider objects.- Returns:
- an unmodifiable sorted map of from input stream provider names to provider objects.
-
getArchiveOutputStreamProviders
Gets an unmodifiable sorted map from output stream provider names to provider objects.- Returns:
- an unmodifiable sorted map of from input stream provider names to provider objects.
-
getEntryEncoding
Gets the encoding to use for arj, jar, ZIP, dump, cpio and tar files, or null for the archiver default.- Returns:
- entry encoding, or null for the archiver default
- Since:
- 1.27.1-0
-
getInputStreamArchiveNames
Description copied from interface:ArchiveStreamProviderGets all the input stream archive names for this provider- Specified by:
getInputStreamArchiveNamesin interfaceArchiveStreamProvider- Returns:
- all the input archive names for this provider
-
getOutputStreamArchiveNames
Description copied from interface:ArchiveStreamProviderGets all the output stream archive names for this provider- Specified by:
getOutputStreamArchiveNamesin interfaceArchiveStreamProvider- Returns:
- all the output archive names for this provider
-
withInstalledProviders
- Since:
- 1.27.1-0
-
withInstalledProviders
- Since:
- 1.27.1-0
-
withProviders
@Experimental public ArchiveStreamFactory withProviders(Iterable<? extends ArchiveStreamProvider> providers) - Since:
- 1.27.1-0
-