java gzip 压缩解压工具类,开箱即用
gzip原理看我另外一篇介绍
压缩效果直接看图:
package com.yeahmobi.datacheck.util;import java.io.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;public class CompressUtil {public static void main(String[] args) throws IOException {// 原文件String inFileName = "D:\\response.xls";compressFile(inFileName);// 压缩文件//String gzFileName = "D:\\response.xls.gz";//doUncompressFile(gzFileName);}// 压缩public static void compressFile(String inFileName) throws IOException {FileInputStream in = null;GZIPOutputStream out = null;String outFileName = inFileName + ".gz";try {in = new FileInputStream(new File(inFileName));} catch (FileNotFoundException e) {throw new RuntimeException("文件不存在:" + inFileName);}out = new GZIPOutputStream(new FileOutputStream(outFileName));byte[] buf = new byte[10240];int len = 0;if (in != null && out != null) {try {while (((in.available() > 10240) && (in.read(buf)) > 0)) {out.write(buf);}len = in.available();in.read(buf, 0, len);out.write(buf, 0, len);in.close();out.flush();out.close();} catch (IOException e) {throw new RuntimeException("压缩失败:" + inFileName);}}in.close();out.close();}// 解压public static void doUncompressFile(String inFileName) {try {if (!getExtension(inFileName).equalsIgnoreCase("gz")) {throw new RuntimeException("文件名必须是gz后缀");}GZIPInputStream in = null;try {in = new GZIPInputStream(new FileInputStream(inFileName));} catch (FileNotFoundException e) {throw new RuntimeException("文件不存在 " + inFileName);}String outFileName = getFileName(inFileName);try (FileOutputStream out = new FileOutputStream(outFileName);) {byte[] buf = new byte[1024];int len;while ((len = in.read(buf)) > 0) {out.write(buf, 0, len);}in.close();out.close();} catch (FileNotFoundException e) {throw new RuntimeException("解压失败" + outFileName);}} catch (IOException e) {throw new RuntimeException("失败");}}// 获取文件后缀名public static String getExtension(String f) {String ext = "";int i = f.lastIndexOf('.');if (i > 0 && i < f.length() - 1) {ext = f.substring(i + 1);}return ext;}// 获取文件名public static String getFileName(String f) {String fname = "";int i = f.lastIndexOf('.');if (i > 0 && i < f.length() - 1) {fname = f.substring(0, i);}return fname;}
}