package Chapter7;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
import org.apache.hadoop.io.compress.CompressionInputStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.util.ReflectionUtils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class compress {
public static void compress(String filePath, String method){
Configuration conf = new Configuration();
FileOutputStream fos = null;
CompressionOutputStream outputStream = null;
FileInputStream fis = null;
try {
Class<?> codecClass = Class.forName(method);
CompressionCodec codec = (CompressionCodec) ReflectionUtils.
newInstance(codecClass,conf);
fos = new FileOutputStream(filePath +
codec.getDefaultExtension());
outputStream= codec.createOutputStream(fos);
fis = new FileInputStream(filePath);
IOUtils.copyBytes(fis,outputStream,1020);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
IOUtils.closeStream(outputStream);
IOUtils.closeStream(fis);
}
}
public static void decompress(String filePath){
Configuration conf = new Configuration();
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory.getCodec(new Path(filePath));
if (codec == null){
System.out.println("No codec found" + filePath);
return;
}
FileInputStream fis = null;
CompressionInputStream inputStream = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(filePath);
inputStream = codec.createInputStream(fis);
String newFile = CompressionCodecFactory.removeSuffix(filePath,
codec.getDefaultExtension());
fos = new FileOutputStream(newFile);
IOUtils.copyBytes(inputStream,fos,1020);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
IOUtils.closeStream(inputStream);
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
}
}
public static void main(String[] args) {
}
}