java 中list<MdtrtSumDO>集合、list<MdtrtDO>集合、list<MdSumDO>集合分别导出多个txt并打包成zip并反馈到前端
时间: 2024-03-20 10:43:40 浏览: 15
要实现将 List<MdtrtSumDO>、List<MdtrtDO>、List<MdSumDO> 三个集合中的数据导出到多个txt文件中,并将这些文件打包成zip文件,最后反馈到前端,你可以按照以下步骤进行操作:
1. 首先,将三个集合中的数据写入到对应的txt文件中。可以参考上一个问题中的示例代码,使用 FileWriter 将数据写入到每个txt文件中。
2. 接下来,使用 ZipOutputStream 将所有的txt文件打包成一个zip文件。ZipOutputStream 是一个输出流,可以用来将数据压缩成zip格式,可以将其与 FileOutputStream 配合使用,将压缩后的数据写入到文件中。
```java
import java.io.*;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
public static void zipFiles(List<File> files, String zipFilePath) {
byte[] buf = new byte[1024];
try {
//创建一个Zip输出流
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFilePath));
for (int i = 0; i < files.size(); i++) {
File file = files.get(i);
FileInputStream in = new FileInputStream(file);
//将文件添加到Zip输出流中
out.putNextEntry(new ZipEntry(file.getName()));
int len;
//读入需要下载的文件的内容,打包到zip文件
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
//关闭ZipEntry,完成将文件添加到Zip输出流中
out.closeEntry();
in.close();
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
3. 最后,将生成的zip文件反馈到前端,可以使用 HttpServletResponse 的输出流将文件内容写回到浏览器中。
```java
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class ExportUtil {
public static void export(List<MdtrtSumDO> list1, List<MdtrtDO> list2, List<MdSumDO> list3, HttpServletResponse response) {
List<File> fileList = new ArrayList<>();
String path = "C:/MyFolder/"; //指定txt文件保存的路径
try {
//将list1中的数据写入到txt文件中
FileWriter writer1 = new FileWriter(path + "mdtrtsum.txt");
for (MdtrtSumDO mdtrtSumDO : list1) {
writer1.write(mdtrtSumDO.toString() + "\n");
}
writer1.close();
fileList.add(new File(path + "mdtrtsum.txt"));
//将list2中的数据写入到txt文件中
FileWriter writer2 = new FileWriter(path + "mdtrt.txt");
for (MdtrtDO mdtrtDO : list2) {
writer2.write(mdtrtDO.toString() + "\n");
}
writer2.close();
fileList.add(new File(path + "mdtrt.txt"));
//将list3中的数据写入到txt文件中
FileWriter writer3 = new FileWriter(path + "mdsum.txt");
for (MdSumDO mdSumDO : list3) {
writer3.write(mdSumDO.toString() + "\n");
}
writer3.close();
fileList.add(new File(path + "mdsum.txt"));
//将所有txt文件打包成zip文件
ZipUtil.zipFiles(fileList, path + "mydata.zip");
//将zip文件反馈到前端
File file = new File(path + "mydata.zip");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
InputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
in.close();
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
以上是一个简单的实现方式,你可以根据实际需要进行修改和优化。需要注意的是,在使用 ZipOutputStream 打包文件时,需要确保每个文件在zip包中的路径是唯一的,否则会出现冲突。