背景
有时候网络传输中,我们首先需要对文件进行压缩。
压缩算法也是多种多样,此处演示最常用的 zip 压缩方式。
java 实现
maven 依赖
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.1</version>
</dependency>
压缩工具类
- ZipUtils.java
import lombok.extern.slf4j.Slf4j;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
/**
* 解压缩工具类
*
* @author binbin.hou
*/
@Slf4j
public final class ZipUtils {
private ZipUtils() {
}
/**
* 生成 zip 文件
*
* 将 file 输出到 os 压缩文件流中
* @param os 输出流
* @param commonFile 文件路径
*/
public static void generateZipFile(OutputStream os, String commonFile) {
File targetFile = new File(commonFile);
generateZipFile(os, targetFile);
}
/**
* 生成 zip 文件
*
* 将 file 输出到 os 压缩文件流中
* @param os 输出流
* @param targetFile 文件路径
*/
public static void generateZipFile(OutputStream os, File targetFile) {
try (ZipOutputStream out = new ZipOutputStream(os);
FileInputStream fis = new FileInputStream(targetFile)) {
byte[] buffer = new byte[1024];
//设置编码格式
out.setEncoding("GBK");
out.putNextEntry(new ZipEntry(targetFile.getName()));
int len;
//读入需要下载的文件的内容,打包到zip文件
while ((len = fis.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
out.closeEntry();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
使用方式
File csvFile = new File("1.csv");
File zipFile = new File("1.zip");
// 压缩文件
try(FileOutputStream fos = new FileOutputStream(zipFile)) {
ZipUtils.generateZipFile(fos, csvFile);
}