使用javaAPI进行文件的解压缩
前言
二、代码
代码如下(示例):
package com.atguigu.mr.test;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
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;
import org.apache.hadoop.io.compress.CompressionInputStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.util.ReflectionUtils;
import org.junit.Test;
public class TestCompression {
@Test
public void testcompression() throws ClassNotFoundException, IOException {
//解压缩:调用Compressioncodec.createcompressioninputsream 返回一个可以解压缩的输入流
//压缩:调用Compressioncodec.createcompressionoutputsream 返回一个可以压缩的输出流
Path file=new Path("D:/悲惨世界.txt");
String codecclassName="org.apache.hadoop.io.compress.GzipCodec";
Class<?> codecclass = Class.forName(codecclassName);
Configuration conf = new Configuration();
FileSystem fs=FileSystem.get(conf);
FSDataInputStream inputStream = fs.open(file);
//确定使用哪种压缩格式compressioncodec
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecclass, conf);
FSDataOutputStream outputStream = fs.create(new Path("D:/file"+codec.getDefaultExtension()), true);
//带压缩的输出流
CompressionOutputStream createOutputStream = codec.createOutputStream(outputStream);
IoUtils.copyBytes(inputStream, createOutputStream, conf, true);
}
@Test
public void testdecompression() throws Exception {
Path file=new Path("D:/file.gz");
Configuration conf = new Configuration();
//根据后缀获取文件的额压缩格式
CompressionCodec codec = new CompressionCodecFactory(conf).getCodec(file);
//创建一个可以解压缩的输入流
FileSystem fs=FileSystem.get(conf);
FSDataInputStream is = fs.open(file);
CompressionInputStream createInputStream = codec.createInputStream(is);
//创建一个非压缩的输出流
FSDataOutputStream outputstream = fs.create(new Path("D:/file.txt"), true);
IoUtils.copyBytes(createInputStream, outputstream, conf, true);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。