本文是“Java不生成临时文件的导出下载csv文件的功能实现(1)一文的扩展,所以模拟输入和下载文件的代码同上篇文章。
不同之处在于要设置每个csv的数据量
private static final Integer fileCapacity = 10000;
缓存生成的csv字节数组流的列表
List bytesList = new ArrayList<>();
根据数据总数和单csv数据量大小计算csv字节数组流的个数
List bytesList = new ArrayList<>();
Integer fileCount = dataList.size() / fileCapacity;
for (int i=0; i < fileCount; i++) {
//分组,每个csv文件保存10000条数据,整体打包为一个zip文件
List subList = dataList.subList(i*fileCapacity, (i+1)*fileCapacity);
//生成byte数组
byte[] bytes = this.generateCsvFile(subList, fieldNames, fieldDescs);
bytesList.add(bytes);
//这里不能清除,否则原list中对应的数据也会清除掉
//subList.clear();
}
//最后不足10000的数据
if (fileCount*fileCapacity < dataList.size()) {
List subList = dataList.subList