通过Metadata取得.gz的原始文件名
有些.gz文件是有Metadata的,所以无论.gz文件如何改名,都可以取得原始的文件名。
public static void unGzipFile(String SrcFile,String OutPath) throws Exception {
FileInputStream fin = new FileInputStream(SrcFile);
GZIPInputStream gzin = new GZIPInputStream(fin);
GzipCompressorInputStream stream1=new GzipCompressorInputStream(new FileInputStream(SrcFile));
String fileName = stream1.getMetaData().getFilename();
stream1.close();
FileOutputStream fout = new FileOutputStream(OutPath+File.separator+fileName);
int num;
byte[] buf=new byte[4096];
while ((num = gzin.read(buf,0,buf.length)) != -1){
fout.write(buf,0,num);
}
gzin.close();
fout.close();
fin.close();
}
没有Metadata的gz文件无法取得原始文件名
这时候需要考虑,如果取不到Metadata,则可以用压缩后文件名去掉.gz后缀作为文件名。
虽然无法确定原始文件名,但文件总需要个名字不是么。
比较懒的方法是不管Metadata,都用去掉.gz后缀(懒死?)。
public static void unGzipFile(String SrcFile,String OutPath) throws Exception {
FileInputStream fin = new FileInputStream(SrcFile);
GZIPInputStream gzin = new GZIPInputStream(fin);
GzipCompressorInputStream stream1=new GzipCompressorInputStream(new FileInputStream(SrcFile));
String fileName = stream1.getMetaData().getFilename();
stream1.close();
if (fileName==null) {
fileName=SrcFile.substring(0,SrcFile.lastIndexOf("."));
fileName=fileName.substring(fileName.lastIndexOf(File.separator)+1);
}
FileOutputStream fout = new FileOutputStream(OutPath+File.separator+fileName);
int num;
byte[] buf=new byte[4096];
while ((num = gzin.read(buf,0,buf.length)) != -1){
fout.write(buf,0,num);
}
gzin.close();
fout.close();
fin.close();
}