解压.gz文件时取得正确的文件名

通过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();  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值