Example usage for org.apache.commons.vfs.impl DefaultFileReplicator init

List of usage examples for org.apache.commons.vfs.impl DefaultFileReplicator init

Introduction

In this page you can find the example usage for org.apache.commons.vfs.impl DefaultFileReplicator init.

Prototype

public void init() throws FileSystemException 

Source Link

Document

Initialises this component.

Usage

From source file:com.threecrickets.sincerity.util.IoUtil.java

/**
 * Unpacks all files in an archive using Apache Commons VFS.
 * <p>/*  w ww  . java2 s  .  c  o m*/
 * Supported formats: zip, tar.gz/tgz, tar.bz2.
 * 
 * @param archiveFile
 *        The archive file
 * @param destinationDir
 *        The destination directory
 * @param workDir
 *        The work directory
 * @throws IOException
 *         In case of an I/O error
 */
public static void unpack(File archiveFile, File destinationDir, File workDir) throws IOException {
    String scheme = null;
    String name = archiveFile.getName();
    DefaultFileSystemManager manager = new DefaultFileSystemManager();
    try {
        boolean untar = false;
        if (name.endsWith(".zip")) {
            scheme = "zip:";
            manager.addProvider("zip", new ZipFileProvider());
        } else if (name.endsWith(".tar.gz") || name.endsWith(".tgz")) {
            scheme = "gz:";
            untar = true;
            manager.addProvider("tar", new TarFileProvider());
            manager.addProvider("gz", new GzipFileProvider());
            manager.addProvider("tgz", new TgzFileProvider());
        } else if (name.endsWith(".tar.bz2")) {
            scheme = "bz2:";
            untar = true;
            manager.addProvider("tar", new TarFileProvider());
            manager.addProvider("bz2", new Bzip2FileProvider());
            manager.addProvider("tbz2", new Tbz2FileProvider());
        }

        if (scheme != null) {
            DefaultFileReplicator replicator = new DefaultFileReplicator(workDir);
            replicator.init();
            manager.setReplicator(replicator);
            manager.setTemporaryFileStore(replicator);
            DefaultLocalFileProvider fileProvider = new DefaultLocalFileProvider();
            manager.addProvider("file", fileProvider);
            manager.setDefaultProvider(fileProvider);
            manager.setFilesCache(new DefaultFilesCache());
            manager.init();

            String path = scheme + archiveFile.toURI();
            FileObject fileObject = manager.resolveFile(path);
            FileObject[] children = fileObject.getChildren();
            if (untar && children.length > 0) {
                FileObject tar = manager
                        .resolveFile(new File(workDir, children[0].getName().getBaseName()).toURI().toString());
                org.apache.commons.vfs.FileUtil.copyContent(children[0], tar);
                tar = manager.resolveFile("tar:" + tar.getName());
                children = tar.getChildren();
            }

            for (FileObject child : children)
                copyRecursive(manager, child, manager.resolveFile(destinationDir.toURI().toString()));
        }
    } finally {
        manager.close();
    }
}