需求内容:将数据库中的字符串转换成文件,并以压缩包的形式批量下载。
步骤:
一、字符串写成临时文件。
二、将得到的临时文件列表打包压缩。
三、将临时文件、临时压缩文件删除。
操作:
一、字符串写成临时文件
1 String dir = System.getProperty("java.io.tmpdir") + File.separator; 2 File fDir = new File(dir); 3 if (!fDir.exists()) { 4 fDir.mkdirs(); 5 }
//创建临时文件夹
1 File file = new File(dir, fn); //fn是文件的名称,带后缀的 2 FileUtils.writeStringToFile(file, 字符串内容, "UTF-8"); //将字符串写为临时文件
二、将得到的临时文件列表打包压缩
1 File zipFile = new File(dir, "download.zip"); 2 ZipFilesUtil.doZipFiles(文件列表, zipFile);//用到了压缩工具类
压缩文件的工具类:
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 import java.util.zip.ZipEntry; 5 import java.util.zip.ZipOutputStream; 6 7 public class ZipFilesUtil { 8 /** 9 * *将多个文件压缩 10 */ 11 public static void doZipFiles(java.io.File[] srcfile, java.io.File zipfile) { 12 byte[] buf = new byte[1024]; 13 ZipOutputStream out = null; 14 try { 15 out = new ZipOutputStream(new FileOutputStream( 16 zipfile)); 17 for (int i = 0; i < srcfile.length; i++) { 18 FileInputStream in = new FileInputStream(srcfile[i]); 19 out.putNextEntry(new ZipEntry(srcfile[i].getName())); 20 int len; 21 while ((len = in.read(buf)) > 0) { 22 out.write(buf, 0, len); 23 } 24 out.closeEntry(); 25 in.close(); 26 } 27 out.close(); 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } finally { 31 try { 32 out.close(); 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 } 37 38 } 39 }
三、将临时文件、临时压缩文件删除
1 for (File file : fileArray) { 2 FileUtils.deleteQuietly(file);//删除临时文件 3 } 4 FileUtils.deleteQuietly(zipFile);
出现的问题:前端控制台显示跨域,还以为是我没有做跨域处理,实际上项目中已经做了通用的跨域处理,与我有没有加跨域没有关系,那么为什么会出现这个问题呢?
原因是干了下面这件蠢事。。。
1 // 清空response 2 response.reset();
总结:大佬说写代码就像堆积木,需要什么代码就去网上搜什么。嗯好的。
用到了下载文件和压缩文件的工具类。
参考:
https://blog.csdn.net/chaos_le/article/details/81871472 //转写字符串为文件
https://www.cnblogs.com/zxg-blog/p/10687866.html //将文件列表压缩的工具类
感觉自己写的文章好冷场,哈哈哈哈。。。打扰了