com.sangupta.jerry.util.ArchiveUtils Maven / Gradle / Ivy
/**
*
* jerry - Common Java Functionality
* Copyright (c) 2012-2016, Sandeep Gupta
*
* http://sangupta.com/projects/jerry-core
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.sangupta.jerry.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.compress.compressors.gzip.GzipUtils;
import org.apache.commons.compress.utils.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Utility classes to pack/unpack popular compressed files
* like ZIP, RAR, TAR, GZ etc.
*
* @author sangupta
*
*/
public abstract class ArchiveUtils {
/**
* Logger
*/
private static final Logger LOGGER = LoggerFactory.getLogger(ArchiveUtils.class);
/**
* Unpack the TAR file into the given output directory.
*
* @param tarFile
* the tar file that needs to be unpacked
*
* @param outputDir
* the directory in which the entire file is unpacked
*
* @throws ArchiveException
* if the TAR file is corrupt
*
* @throws IOException
* if error occurs reading TAR file
*
* @return a list of {@link File} objects representing the files unpacked
* from the TAR file
*
*/
public static List unpackTAR(final File tarFile, final File outputDir) throws ArchiveException, IOException {
LOGGER.info("Untaring {} to dir {}", tarFile.getAbsolutePath(), outputDir.getAbsolutePath());
final List untaredFiles = new LinkedList();
InputStream fileInputStream = null;
TarArchiveInputStream tarInputStream = null;
try {
fileInputStream = new FileInputStream(tarFile);
tarInputStream = (TarArchiveInputStream) new ArchiveStreamFactory().createArchiveInputStream("tar", fileInputStream);
TarArchiveEntry entry = null;
while ((entry = (TarArchiveEntry) tarInputStream.getNextEntry()) != null) {
final File outputFile = new File(outputDir, entry.getName());
if (entry.isDirectory()) {
LOGGER.debug("Attempting to write output directory {}", outputFile.getAbsolutePath());
if (!outputFile.exists()) {
LOGGER.debug("Attempting to create output directory {}", outputFile.getAbsolutePath());
if (!outputFile.mkdirs()) {
throw new IllegalStateException("Couldn't create directory: " + outputFile.getAbsolutePath());
}
}
// next file
continue;
}
// write the plain file
LOGGER.debug("Creating output file {}", outputFile.getAbsolutePath());
final OutputStream outputFileStream = new FileOutputStream(outputFile);
IOUtils.copy(tarInputStream, outputFileStream);
outputFileStream.close();
// add to the list of written files
untaredFiles.add(outputFile);
}
} finally {
org.apache.commons.io.IOUtils.closeQuietly(tarInputStream);
org.apache.commons.io.IOUtils.closeQuietly(fileInputStream);
}
return untaredFiles;
}
/**
* Unpack the Gzip GZ file into the given directory.
*
* @param gzipFile
* the file that needs to be unpacked
*
* @param outputDir
* the directory in which the archive is unpacked
*
* @throws FileNotFoundException
* if the GZ file is not found
*
* @return a list of {@link File} objects representing the files unpacked
* from the TAR file
*/
public static List unpackGZIP(final File gzipFile, final File outputDir) throws IOException {
String outputFileName = GzipUtils.getUncompressedFilename(gzipFile.getName());
File outputFile = new File(outputDir, outputFileName);
FileInputStream fin = null;
BufferedInputStream in = null;
FileOutputStream out = null;
GzipCompressorInputStream gzIn = null;
try {
fin = new FileInputStream(gzipFile);
in = new BufferedInputStream(fin);
out = new FileOutputStream(outputFile);
gzIn = new GzipCompressorInputStream(in);
org.apache.commons.io.IOUtils.copy(gzIn, out);
} finally {
org.apache.commons.io.IOUtils.closeQuietly(gzIn);
org.apache.commons.io.IOUtils.closeQuietly(out);
org.apache.commons.io.IOUtils.closeQuietly(in);
org.apache.commons.io.IOUtils.closeQuietly(fin);
}
List files = new ArrayList();
files.add(outputFile);
return files;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy