###引言
在做项目的时候经常会涉及到文件的压缩,比如近期用Java Web做一个后台管理,后台有个导出功能,需要统计生成几十个excel文件,然后进行下载,如果不将这些文件进行压缩传送,耗费用户流量不说,用户浏览器还会一个接一个地接收文件不停的点击确认保存。所以需要对文件进行压缩传送。
关于文件压缩,Java的java.util.zip包提供了这个功能。这个包下总共有20多个相关的类,下面介绍一下常用的几个类,读者感兴趣也可查看该工具包。
该工具包下和解压缩相关的基类有ZipInputStream、ZipOutputStream、GZIPInputStream、GZIPOutputStream。其中ZipInputStream、GZIPInputStream这两个输入流主要用于解压时读取压缩文件,ZipOutputStream、GZIPOutputStream两个输出流用于压缩,将数据流写入压缩文件。通过名字我们可以看到这两个类对应我们常见的以.zip和.gzip结尾的压缩文件类型。另外还有一个ZipFile,这个类会在解压时用到。个人理解是用于初始化解析File。
关于压缩,首先贴上实现的压缩代码
/**
* Created by someone on 2017/10/16.
*/
public class IOUtil {
/**
* 通过指定路径和文件名来获取文件对象,当文件不存在时自动创建
* @param path
* @param fileName
* @return
* @throws IOException
*/
public static File getFile(String path, String fileName) throws IOException {
// 创建文件对象
File file;
if (path != null && !path.equals(""))
file = new File(path, fileName);
else
file = new File(fileName);
if (!file.exists()) {
file.createNewFile();
}
// 返回文件
return file;
}
/**
* 获得指定文件的输出流
* @param file
* @return
* @throws FileNotFoundException
*/
public static FileOutputStream getFileStream(File file) throws FileNotFoundException {
return new FileOutputStream(file);
}
/**
* 将多个文件压缩
* @param fileList 待压缩的文件列表
* @param zipFileName 压缩文件名
* @return 返回压缩好的文件
* @throws IOException
*/
public static File getZipFile(List<File> fileList, String zipFileName) throws IOException {
File zipFile = getFile(PathConfig.getPath(), zip