需求內容:將數據庫中的字符串轉換成文件,並以壓縮包的形式批量下載。
步驟:
一、字符串寫成臨時文件。
二、將得到的臨時文件列表打包壓縮。
三、將臨時文件、臨時壓縮文件刪除。
操作:
一、字符串寫成臨時文件
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 //將文件列表壓縮的工具類
感覺自己寫的文章好冷場,哈哈哈哈。。。打擾了
