Class TarFile

  • All Implemented Interfaces:
    ArchiveFile
    Direct Known Subclasses:
    BZip2TarFile, GZipTarFile, SnappyTarFile, XZTarFile

    public class TarFile
    extends java.lang.Object
    implements ArchiveFile

    Implementation of ArchiveFile for tar files.

    Compared to ZipFile, this one should be used with some care, due to the nature of a tar file: While a zip file contains a catalog, a tar file does not. In other words, the only way to read a tar file in a performant manner is by iterating over it from the beginning to the end. If you try to open another entry than the "next" entry, then you force to skip entries, until the requested entry is found. This may require to reread the entire file!

    In other words, the recommended use of this class is to use getEntries() and invoke getInputStream(TarArchiveEntry) only for the current entry. Basically, this is to handle it like TarArchiveInputStream.

    The advantage of this class is that you may write code for the ArchiveFile, which is valid for both tar files and zip files.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private org.apache.commons.compress.archivers.tar.TarArchiveEntry currentEntry  
      private java.io.File file  
      private org.apache.commons.compress.archivers.tar.TarArchiveInputStream inputStream  
    • Constructor Summary

      Constructors 
      Constructor Description
      TarFile​(java.io.File file)
      Creates a new instance with the given file.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()  
      private boolean findEntry​(org.apache.commons.compress.archivers.tar.TarArchiveEntry entry, org.apache.commons.compress.archivers.tar.TarArchiveEntry currentEntry)  
      java.util.Enumeration<org.apache.commons.compress.archivers.ArchiveEntry> getEntries()
      Implementation of ArchiveFile.getEntries().
      protected java.io.InputStream getInputStream​(java.io.File file)  
      java.io.InputStream getInputStream​(org.apache.commons.compress.archivers.ArchiveEntry entry)
      Returns an InputStream with the given entries contents.
      java.io.InputStream getInputStream​(org.apache.commons.compress.archivers.tar.TarArchiveEntry entry)
      Returns an InputStream with the given entries contents.
      private java.io.InputStream getInputStream​(org.apache.commons.compress.archivers.tar.TarArchiveEntry entry, org.apache.commons.compress.archivers.tar.TarArchiveEntry currentEntry)  
      private void open()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • file

        private final java.io.File file
      • inputStream

        private org.apache.commons.compress.archivers.tar.TarArchiveInputStream inputStream
      • currentEntry

        private org.apache.commons.compress.archivers.tar.TarArchiveEntry currentEntry
    • Constructor Detail

      • TarFile

        public TarFile​(java.io.File file)
        Creates a new instance with the given file.
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • getInputStream

        public java.io.InputStream getInputStream​(org.apache.commons.compress.archivers.ArchiveEntry entry)
                                           throws java.io.IOException
        Description copied from interface: ArchiveFile
        Returns an InputStream with the given entries contents. org.apache.commons.compress.archivers.ArchiveEntry
        Specified by:
        getInputStream in interface ArchiveFile
        Throws:
        java.io.IOException
      • getInputStream

        public java.io.InputStream getInputStream​(org.apache.commons.compress.archivers.tar.TarArchiveEntry entry)
                                           throws java.io.IOException
        Returns an InputStream with the given entries contents. This InputStream may be closed: Nothing happens in that case, because an actual close would invalidate the underlying TarArchiveInputStream.
        Throws:
        java.io.IOException
      • getInputStream

        protected java.io.InputStream getInputStream​(java.io.File file)
                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • getInputStream

        private java.io.InputStream getInputStream​(org.apache.commons.compress.archivers.tar.TarArchiveEntry entry,
                                                   org.apache.commons.compress.archivers.tar.TarArchiveEntry currentEntry)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • open

        private void open()
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • findEntry

        private boolean findEntry​(org.apache.commons.compress.archivers.tar.TarArchiveEntry entry,
                                  org.apache.commons.compress.archivers.tar.TarArchiveEntry currentEntry)
                           throws java.io.IOException
        Throws:
        java.io.IOException