commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ken Tanaka <Ken.Tan...@noaa.gov>
Subject VFS how to read gzipped content from tar file
Date Tue, 30 Oct 2007 20:17:13 GMT
I would like to create an uncompressed file from a compressed file 
inside of a tar archive.

Can VFS allow me to do this in one step? I can get the compressed.gz 
file from archive.tar as a file on disk, then I can decompress the gzip 
file and then delete the .gz version. If there is an example, tutorial 
or book online or in print that would be great, I haven't found anything 
like this yet.

Conceptually there is a tar file:

archive.tar
 +- tardir/
     +- content.txt.gz

I'd like to end up with an uncompressed file "content.txt".

I tried something like:

    FileObject gzTarFile = 
fsManager.resolveFile("tar:gz:/archive.tar!/tardir/content.txt.gz");

    LocalFile newFile = (LocalFile) 
fsManager.resolveFile("file:///destination/content.txt");
    newFile.copyFrom(gzTarFile, new AllFileSelector());

Thanks in advance for any advice
-Ken

The test program I'm working with follows:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - -
package gov.noaa.eds.tryVfs;

import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemManager;
import org.apache.commons.vfs.VFS;

/**
 * Try using VFS to read the content of a compressed (gz) file inside of
 * a tar file.
 */
public class App
{
    static FileSystemManager fsManager = null;
   
    public static void main( String[] args )
    {
        try {
            fsManager = VFS.getManager();
        } catch (FileSystemException ex) {
            ex.printStackTrace();
        }
       
        try {
            /* resolveFile OK */
            System.out.println("Resolve tar file:");
            FileObject tarFile = fsManager.resolveFile(
                    "tar:/extra/data/tryVfs/archive.tar");
           
            FileName tarFileName = tarFile.getName();
            System.out.println("  Path     : " + tarFileName.getPath());
            System.out.println("  URI      : " + tarFileName.getURI());
           
           
            /* resolveFile OK */
            System.out.println("Resolve gzip file inside tar file:");
            FileObject gzTarFile = fsManager.resolveFile(
                    
"tar:file:///extra/data/tryVfs/archive.tar!/tarDir/content.txt.gz");
           
            FileName gzTarFileName = gzTarFile.getName();
            System.out.println("  Path     : " + gzTarFileName.getPath());
            System.out.println("  URI      : " + gzTarFileName.getURI());
           
           
            /* resolveFile has an error
             * uncomment one of the // "file string" arguments for 
resolveFile below
             * each of the strings I've tried has an /* error message * /
             */
            System.out.println("Resolve content of gzip file inside tar 
file:");
            FileObject contentFile = fsManager.resolveFile(
//                
"tar:gz:/extra/data/tryVfs/archive.tar!/tarDir/content.txt.gz"
                /* Unknown message with code "Unknown message with code 
"vfs.provider.tar/open-tar-file.error".". */
                   
//                
"tar:gz:///extra/data/tryVfs/archive.tar!/tarDir/content.txt.gz"
                /* Unknown message with code "Unknown message with code 
"vfs.provider.tar/open-tar-file.error".". */
                   
//                
"tar:file:gz:/extra/data/tryVfs/archive.tar!/tarDir/content.txt.gz"
                /* URI 
"file:gz:///extra/data/tryVfs/archive.tar!/tarDir/content.txt.gz" is not 
an absolute file name. */
                   
//                
"tar:file:gz:/extra/data/tryVfs/archive.tar!///tarDir/content.txt.gz!/content.txt"
                /* URI 
"file:gz:///extra/data/tryVfs/archive.tar!/tarDir/content.txt.gz" is not 
an absolute file name. */
                   
                
"tar:gz:///extra/data/tryVfs/archive.tar!/tarDir/content.txt"
                /* Unknown message with code "Unknown message with code 
"vfs.provider.tar/open-tar-file.error".". */
                );
           
            FileName contentFileName = contentFile.getName();
            System.out.println("  Path     : " + contentFileName.getPath());
            System.out.println("  URI      : " + contentFileName.getURI());
           
            /* copy uncompressed content to a new file */
//            LocalFile newFile = (LocalFile) fsManager.resolveFile(
//                    "file:///extra/data/tryVfs/content.txt");           
//            newFile.copyFrom(contentFile, new AllFileSelector());
        } catch (FileSystemException ex) {
            ex.printStackTrace();
        }
    } // main( String[] args )
}

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message