1、将一个集合list ,拼接为多行文本,转换成文件,并进行压缩。见代码中的zip()方法
package cn.hsa.file;
import cn.hsa.dto.TestDTO;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j
public class zipTest {
public static void main(String[] args) {
//搞一个测试数组
List<TestDTO> list = new ArrayList<>();
TestDTO dto = new TestDTO();
TestDTO dto1 = new TestDTO();
dto.setId("01");
dto.setAge("20岁");
dto.setGend("女");
dto.setHeight("165cm");
dto.setNaty("汉族");
dto.setWeight("46公斤");
dto.setName("瑶瑶");
dto1.setId("02");
dto1.setAge("20岁");
dto1.setGend("男");
dto1.setHeight("175cm");
dto1.setNaty("汉族");
dto1.setWeight("65公斤");
dto1.setName("走地鸡");
list.add(dto);
list.add(dto1);
//按接口指定的格式拼接为多行文本,并获取.txt打包为.zip后的字节数组
//第二个参数为文本文档中数据字段的顺序
byte[] in = zip(list, o -> o.getId() + "\t" + o.getName() + "\t" + o.getAge()
+ "\t" + o.getHeight() + "\t" + o.getWeight() + "\t" + o.getNaty());
//将字节数组转换成base64编码
String encode = Base64.encode(in);
//将base64 编码转 字节数组
byte[] bytes = Base64.decode(encode);
}
/**
* @description: 数据集合转txt后添加到zip
* @date: 2022/10/13 9:09
* @param: [list, func]
* @return: byte[]
**/
public static <T> byte[] zip(List<T> list, Function<T, String> func) {
//list转text
String text = list.stream().map(func).collect(Collectors.joining("\r\n"));
//开流
try (ByteArrayInputStream bais = new ByteArrayInputStream(text.getBytes());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//压缩流
ZipOutputStream zos = new ZipOutputStream(baos)) {
//添加一个txt文件到zip
zos.putNextEntry(new ZipEntry("person.txt"));
//将text写入txt文件
byte[] buffer = new byte[1024];
int number;
while ((number = bais.read(buffer)) != -1) {
zos.write(buffer, 0, number);
}
//完成压缩
zos.finish();
//返回zip输出流的字节数组
return baos.toByteArray();
} catch (IOException ioe) {
//记录日志
log.error("数据转txt添加到zip时发生异常: ", ioe);
//这里可以抛出异常
return null;
}
}
}
package cn.hsa.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: 测试对象
* @CreateTime: 2022-10-11 17:22
*/
@Data
public class TestDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String age;
private String height;
private String weight;
private String gend;
private String naty;
}