JAVA 读取lzo压缩文件
JAVA读取lzo压缩文件
今天犯了一个愚蠢的问题,用lzo做过压缩的数据,用lzop去读,但疼痛了好一会儿。
lzopcode和lzocode的做个简单介绍:
1.lzocode压缩过的文件都是以.lzo_deflate结尾,相应的加载类:(com.hadoop.compression.lzo.LzoCodec)
2.zopcode压缩过的文件都以.lzo结尾(com.hadoop.compression.lzo.LzopCodec)
读取lzocode文件
privatestaticConfigurationconf=newConfiguration(true);
privatestaticFileSystemhdfs;
privatestaticClass<?>codecClass;
privatestaticCompressionCodeccodec;
static{
Stringpath="/usr/local/webserver/hadoop/etc/hadoop/";
conf.addResource(newPath(path+"core-site.xml"));
conf.addResource(newPath(path+"hdfs-site.xml"));
//加载解压lzo的class,对应的还有lzop的class
codecClass=Class.forName("com.hadoop.compression.lzo.LzoCodec");
codec=(CompressionCodec)ReflectionUtils.newInstance(codecClass,conf);
}
publicList<String>readFile(Stringdir){
InputStreaminput=null;
List<String>list=newLinkedList<String>();
try{
Pathpath=newPath(dir);
FileSystemhdfs=FileSystem.get(URI.create(dir),conf);
//获取hdsf上文件夹下面的文件
FileStatus[]fileStatus=hdfs.listStatus(path);
//遍历文件,逐一读取内容
for(inti=0;i<fileStatus.length;i++){
input=hdfs.open(newPath(fileStatus[i].getPath().toString()));
//解压缩流
input=codec.createInputStream(input);
list.addAll(IOUtils.readLines(input,"utf8"));
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(input!=null)
input.close();
hdfs.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
returnlist;
}