Class ArchiveStreamFactory

  • All Implemented Interfaces:
    ArchiveStreamProvider

    public class ArchiveStreamFactory
    extends java.lang.Object
    implements 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();
     
    • Field Detail

      • APK

        public static final java.lang.String APK
        Constant (value "apk") used to identify the APK archive format.

        APK file extensions are .apk, .xapk, .apks, .apkm

        Since:
        1.22
        See Also:
        Constant Field Values
      • XAPK

        public static final java.lang.String XAPK
        Constant (value "xapk") used to identify the XAPK archive format.

        APK file extensions are .apk, .xapk, .apks, .apkm

        Since:
        1.22
        See Also:
        Constant Field Values
      • APKS

        public static final java.lang.String APKS
        Constant (value "apks") used to identify the APKS archive format.

        APK file extensions are .apk, .xapk, .apks, .apkm

        Since:
        1.22
        See Also:
        Constant Field Values
      • APKM

        public static final java.lang.String APKM
        Constant (value "apkm") used to identify the APKM archive format.

        APK file extensions are .apk, .xapk, .apks, .apkm

        Since:
        1.22
        See Also:
        Constant Field Values
      • AR

        public static final java.lang.String AR
        Constant (value "ar") used to identify the AR archive format.
        Since:
        1.1
        See Also:
        Constant Field Values
      • ARJ

        public static final java.lang.String ARJ
        Constant (value "arj") used to identify the ARJ archive format. Not supported as an output stream type.
        Since:
        1.6
        See Also:
        Constant Field Values
      • CPIO

        public static final java.lang.String CPIO
        Constant (value "cpio") used to identify the CPIO archive format.
        Since:
        1.1
        See Also:
        Constant Field Values
      • DUMP

        public static final java.lang.String DUMP
        Constant (value "dump") used to identify the UNIX DUMP archive format. Not supported as an output stream type.
        Since:
        1.3
        See Also:
        Constant Field Values
      • JAR

        public static final java.lang.String JAR
        Constant (value "jar") used to identify the JAR archive format.
        Since:
        1.1
        See Also:
        Constant Field Values
      • TAR

        public static final java.lang.String TAR
        Constant used to identify the TAR archive format.
        Since:
        1.1
        See Also:
        Constant Field Values
      • ZIP

        public static final java.lang.String ZIP
        Constant (value "zip") used to identify the ZIP archive format.
        Since:
        1.1
        See Also:
        Constant Field Values
      • SEVEN_Z

        public static final java.lang.String SEVEN_Z
        Constant (value "7z") used to identify the 7z archive format.
        Since:
        1.8
        See Also:
        Constant Field Values
      • ALL_NAMES

        private static final java.util.Set<java.lang.String> ALL_NAMES
      • OUTPUT_NAMES

        private static final java.util.Set<java.lang.String> OUTPUT_NAMES
      • DEFAULT

        public static final ArchiveStreamFactory DEFAULT
        The singleton instance using the UTF-8.
        Since:
        1.21
      • entryEncoding

        private final java.nio.charset.Charset entryEncoding
        Entry encoding, null for the default.
      • archiveInputStreamProviders

        private final java.util.SortedMap<java.lang.String,​ArchiveStreamProvider> archiveInputStreamProviders
      • archiveOutputStreamProviders

        private final java.util.SortedMap<java.lang.String,​ArchiveStreamProvider> archiveOutputStreamProviders
      • inputStreamArchiveNames

        private final java.util.Set<java.lang.String> inputStreamArchiveNames
      • outputStreamArchiveNames

        private final java.util.Set<java.lang.String> outputStreamArchiveNames
    • Constructor Detail

      • ArchiveStreamFactory

        public ArchiveStreamFactory()
        Constructs an instance using the archiver default encoding.
      • ArchiveStreamFactory

        public ArchiveStreamFactory​(@Nullable
                                    @Nullable java.nio.charset.Charset entryEncoding)
        Constructs an instance using the specified encoding.
        Parameters:
        entryEncoding - the encoding to be used.
        Since:
        1.27.1-0
    • Method Detail

      • detect

        public static java.lang.String detect​(java.io.InputStream in)
                                       throws ArchiveException
        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

        private static java.lang.String toKey​(java.lang.String name)
      • createArchiveInputStream

        public <I extends ArchiveInputStream<? extends ArchiveEntry>> I createArchiveInputStream​(java.io.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 - The ArchiveInputStream type.
        Parameters:
        in - the input stream
        Returns:
        the archive input stream
        Throws:
        ArchiveException - if the archiver name is not known
        StreamingNotSupportedException - if the format cannot be read from a stream
        java.lang.IllegalArgumentException - if the stream is null or does not support mark
      • createArchiveOutputStream

        public <O extends ArchiveOutputStream<? extends ArchiveEntry>> O createArchiveOutputStream​(java.lang.String archiverName,
                                                                                                   java.io.OutputStream out)
                                                                                            throws ArchiveException
        Creates an archive output stream from an archiver name and an output stream.
        Type Parameters:
        O - The ArchiveOutputStream type.
        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 known
        StreamingNotSupportedException - if the format cannot be written to a stream
        java.lang.IllegalArgumentException - if the archiver name or stream is null
      • getArchiveInputStreamProviders

        public java.util.SortedMap<java.lang.String,​ArchiveStreamProvider> 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

        public java.util.SortedMap<java.lang.String,​ArchiveStreamProvider> 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

        public java.nio.charset.Charset 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

        public java.util.Set<java.lang.String> getInputStreamArchiveNames()
        Description copied from interface: ArchiveStreamProvider
        Gets all the input stream archive names for this provider
        Specified by:
        getInputStreamArchiveNames in interface ArchiveStreamProvider
        Returns:
        all the input archive names for this provider
      • getOutputStreamArchiveNames

        public java.util.Set<java.lang.String> getOutputStreamArchiveNames()
        Description copied from interface: ArchiveStreamProvider
        Gets all the output stream archive names for this provider
        Specified by:
        getOutputStreamArchiveNames in interface ArchiveStreamProvider
        Returns:
        all the output archive names for this provider
      • withInstalledProviders

        @Experimental
        public ArchiveStreamFactory withInstalledProviders()
        Since:
        1.27.1-0
      • withInstalledProviders

        @Experimental
        public ArchiveStreamFactory withInstalledProviders​(java.lang.ClassLoader classLoader)
        Since:
        1.27.1-0