欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法

 更新時間:2020年11月02日 11:37:30   作者:溪~源  
這篇文章主要介紹了Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近接觸到一個需求要求壓縮導(dǎo)出文件,于是乎便要致力于研究一下工具類啦,故也誕生了此篇文章。
下面代碼中,溪源也將import導(dǎo)入的依賴也貼出來了,避免大家引入錯誤。

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author wx
 * @date 2020/10/29 5:19 下午
 */
public class FileZipUtil {

  private static void handlerFile(ZipOutputStream zip, File file, String dir) throws Exception {
    //如果當(dāng)前的是文件夾,則進(jìn)行進(jìn)一步處理
    if (file.isDirectory()) {
      //得到文件列表信息
      File[] fileArray = file.listFiles();
      if (fileArray == null) {
        return;
      }
      //將文件夾添加到下一級打包目錄
      zip.putNextEntry(new ZipEntry(dir + "/"));
      dir = dir.length() == 0 ? "" : dir + "/";
      //遞歸將文件夾中的文件打包
      for (File f : fileArray) {
        handlerFile(zip, f, dir + f.getName());
      }
    } else {
      //當(dāng)前的是文件,打包處理
      //文件輸入流
      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
      ZipEntry entry = new ZipEntry(dir);
      zip.putNextEntry(entry);
      zip.write(FileUtils.readFileToByteArray(file));
      IOUtils.closeQuietly(bis);
      zip.flush();
      zip.closeEntry();
    }
  }

  private static byte[] createZip(String sourceFilePath) throws Exception{
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    ZipOutputStream zip = new ZipOutputStream(outputStream);
    //將目標(biāo)文件打包成zip導(dǎo)出
    File file = new File(sourceFilePath);
    handlerFile(zip, file,"");
    IOUtils.closeQuietly(zip);
    return outputStream.toByteArray();
  }


  public static void exportZip(HttpServletResponse response, String sourceFilePath) {
  //文件名以時間戳作為前綴
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    String filePrefix = sdf.format(new Date());
    String downloadName = filePrefix + ".zip";
    //將文件進(jìn)行打包下載
    try {
      OutputStream out = response.getOutputStream();
      //接收壓縮包字節(jié)
      byte[] data = createZip(sourceFilePath);
      response.reset();
      response.addHeader("Access-Control-Allow-Origin", "*");
      response.setHeader("Access-Control-Expose-Headers", "*");
      response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + downloadName);
      response.addHeader("Content-Length", "" + data.length);
      response.setContentType("application/octet-stream;charset=UTF-8");
      IOUtils.write(data, out);
      out.flush();
      out.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

客戶端調(diào)用方法:

 @GetMapping("/exportFile")
  public Result exportFile(HttpServletResponse response) {
    //第二個參數(shù)為:要壓縮文件的地址
    FileZipUtil.exportZip(response, "/Users/Downloads");
  }

到此這篇關(guān)于Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法的文章就介紹到這了,更多相關(guān)Java導(dǎo)出ZIP壓縮包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea2019.1.4 鼠標(biāo)放到方法上顯示注解的實(shí)現(xiàn)操作

    idea2019.1.4 鼠標(biāo)放到方法上顯示注解的實(shí)現(xiàn)操作

    這篇文章主要介紹了idea2019.1.4 鼠標(biāo)放到方法上顯示注解的實(shí)現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java發(fā)起http請求獲取返回的Json對象方法

    java發(fā)起http請求獲取返回的Json對象方法

    下面小編就為大家分享一篇java發(fā)起http請求獲取返回的Json對象方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 了解Java線程池創(chuàng)建過程

    了解Java線程池創(chuàng)建過程

    那么有沒有一種辦法使得線程可以復(fù)用,就是執(zhí)行完一個任務(wù),并不被銷毀,而是可以繼續(xù)執(zhí)行其他的任務(wù)?在Java中可以通過線程池來達(dá)到這樣的效果。下面我們來詳細(xì)了解一下吧
    2019-05-05
  • maven升級版本后報錯:Blocked mirror for repositories

    maven升級版本后報錯:Blocked mirror for repositories

    本文主要介紹了maven升級版本后報錯:Blocked mirror for repositories,文中的解決方法非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之AC自動機(jī)算法的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之AC自動機(jī)算法的實(shí)現(xiàn)

    AC自動機(jī)算法常被認(rèn)為是Trie樹+KMP算法的結(jié)合體,它是一個多模式匹配算法,在模式匹配領(lǐng)域被廣泛應(yīng)用。本文將詳細(xì)為大家介紹AC自動機(jī)的原理與實(shí)現(xiàn)方法,感興趣的可以了解一下
    2022-12-12
  • 一文搞懂java反射基本API

    一文搞懂java反射基本API

    這篇文章主要為大家介紹了一文搞懂java反射基本API,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java連接mysql數(shù)據(jù)庫的詳細(xì)教程(推薦)

    Java連接mysql數(shù)據(jù)庫的詳細(xì)教程(推薦)

    這篇文章主要介紹了Java連接mysql數(shù)據(jù)庫的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot項目后端開發(fā)邏輯全面梳理

    SpringBoot項目后端開發(fā)邏輯全面梳理

    這篇文章主要介紹了SpringBoot項目后端開發(fā)邏輯全面梳理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java實(shí)現(xiàn)8種排序算法的示例代碼

    Java實(shí)現(xiàn)8種排序算法的示例代碼

    這篇文章主要介紹了8種JAVA實(shí)現(xiàn)排序算法的示例代碼,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • java?Date獲取本月的開始時間與結(jié)束時間

    java?Date獲取本月的開始時間與結(jié)束時間

    這篇文章主要為大家介紹了java?Date獲取本月的開始時間與結(jié)束時間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05

最新評論