com.jeffy.hdfs.compression.FileDecompressor.java Source code

Java tutorial

Introduction

Here is the source code for com.jeffy.hdfs.compression.FileDecompressor.java

Source

/*
 * Copyright AsiaInfo Authors.
 * 
 * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
 */
package com.jeffy.hdfs.compression;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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;

/**
 * Hadoop??
 * 
 * @author Jeffy<renwu58@gmail.com>
 *
 */
public class FileDecompressor {
    /**
     * @param args
     *            
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        //??
        Configuration conf = new Configuration();
        // ?
        CompressionCodecFactory factory = new CompressionCodecFactory(conf);
        for (String uri : args) {
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            Path inputPath = new Path(uri);
            // ??????io.compression.codecs
            CompressionCodec codec = factory.getCodec(inputPath);
            // ??
            if (codec == null) {
                System.err.println("No codec found for " + uri);
                continue;
            }
            String outputUri = CompressionCodecFactory.removeSuffix(uri, codec.getDefaultExtension());
            try (InputStream in = codec.createInputStream(fs.open(inputPath));
                    OutputStream out = fs.create(new Path(outputUri))) {
                IOUtils.copyBytes(in, out, conf);
            }
        }
    }

}