将数据集合List拼接为多行文本,转换成.txt,并打包为.zip,将压缩包zip转换成字节数组。

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值