package me.pbox.compress;
import me.pbox.env.Environment;
import me.pbox.invoke.InvokeException;
import me.pbox.invoke.InvokeUtil;
import org.apache.log4j.Logger;
import java.io.File;
/**
* @author Mike Mirzayanov (mirzayanovmr@gmail.com)
*/
public class CompressUtil {
private static final Logger logger = Logger.getLogger(CompressUtil.class);
public static boolean uncompress(File archiveFile, File uncompressDirectory) {
logger.info("Uncompressing '" + archiveFile + "' to the '" + uncompressDirectory + "'.");
if (archiveFile == null || !archiveFile.isFile() || archiveFile.length() == 0) {
throw new IllegalArgumentException("Illegal file to extract '" + archiveFile + "'.");
}
//noinspection ResultOfMethodCallIgnored
uncompressDirectory.mkdirs();
if (!uncompressDirectory.isDirectory()) {
throw new IllegalArgumentException("Illegal directory to extract '" + uncompressDirectory + "'.");
}
try {
long size = archiveFile.length();
long beforeTimeMillis = System.currentTimeMillis();
boolean result = InvokeUtil.run(true, true, Environment.getBin("7za"), "x", "-y", "-o" + uncompressDirectory, archiveFile.getAbsolutePath()) == 0;
long durationTimeMillis = System.currentTimeMillis() - beforeTimeMillis;
if (result) {
logger.info("Successfully uncompressed '" + archiveFile + "' to the '" + uncompressDirectory + "' [" + size + " bytes in " + durationTimeMillis + " ms].");
} else {
logger.info("Failed to uncompress '" + archiveFile + "' to the '" + uncompressDirectory + "' [in " + durationTimeMillis + " ms].");
}
return result;
} catch (InvokeException e) {
logger.warn("Can't uncompress file '" + archiveFile + "' to the directory '" + uncompressDirectory + "'.", e);
return false;
}
}
public static boolean compress(File targetFile, File compressDirectory) {
logger.info("Compressing '" + compressDirectory + "' to the '" + targetFile + "'.");
if (compressDirectory == null || !compressDirectory.isDirectory()) {
throw new IllegalArgumentException("No such directory to compress '" + compressDirectory + "'.");
}
//noinspection ResultOfMethodCallIgnored
targetFile.getParentFile().mkdirs();
try {
long beforeTimeMillis = System.currentTimeMillis();
boolean result = InvokeUtil.run(true, true, Environment.getBin("7za"), "a", "-mx9", targetFile.getAbsolutePath(), compressDirectory.getAbsolutePath() + "\\*") == 0;
long durationTimeMillis = System.currentTimeMillis() - beforeTimeMillis;
if (result) {
logger.info("Successfully compressed '" + compressDirectory + "' to the '" + targetFile + "' [" + targetFile.length() + " bytes in " + durationTimeMillis + " ms].");
} else {
logger.info("Failed to compress '" + compressDirectory + "' to the '" + targetFile + "' [in " + durationTimeMillis + " ms].");
}
return result;
} catch (InvokeException e) {
logger.warn("Can't compress directory '" + compressDirectory + "' to the file '" + targetFile + "'.", e);
return false;
}
}
}