最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java文件分級目錄打包下載zip的實例代碼

 更新時間:2024年08月26日 09:32:24   作者:無情的螺絲  
這篇文章主要介紹了Java文件分級目錄打包下載zip的實例代碼,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java文件分級目錄打包下載zip

說一下具體實現(xiàn)的功能吧,要將頁面的文件存放在對應(yīng)的文件目錄,打成壓縮包下載。

由于第一次接觸,也是找了一整天網(wǎng)上的方法,費盡腦汁,終于實現(xiàn)了。

打包下載zip的工具類

直接調(diào)用即可

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections.CollectionUtils;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * @Author: fd
 * @Date 2020/7/28 21:33
 * @Description:
 */
public class ZipUtiles {

	private static Logger logger = LoggerFactory.getLogger(ZipUtiles.class);
	// 目錄標識判斷符
	private static final String PATCH = "/";
	// 基目錄
	private static final String BASE_DIR = "/b/";
	// 緩沖區(qū)大小
	private static final int BUFFER = 2048;
	// 字符集
	private static final String CHAR_SET = "UTF-8";

	public static void compress(File srcFile, ZipOutputStream zipOutputStream, String basePath) throws Exception {
		if (srcFile.isDirectory()) {
			compressDir(srcFile, zipOutputStream, basePath);
		} else {
			compressFile(srcFile, zipOutputStream, basePath);
		}
	}

	
	private static void compressDir(File dir, ZipOutputStream zipOutputStream, String basePath) throws Exception {
		try {
			// 獲取文件列表
			File[] files = dir.listFiles();

			if (files.length < 1) {
				ZipEntry zipEntry = new ZipEntry(basePath + dir.getName() + PATCH);

				zipOutputStream.putNextEntry(zipEntry);
				zipOutputStream.closeEntry();
			}

			for (int i = 0,size = files.length; i < size; i++) {
				compress(files[i], zipOutputStream, basePath + dir.getName() + PATCH);
			}
		} catch (Exception e) {
			throw new Exception(e.getMessage(), e);
		}
	}

	private static void compressFile(File file, ZipOutputStream zipOutputStream, String dir) throws Exception {
		try {
			// 壓縮文件
			ZipEntry zipEntry = new ZipEntry(dir + file.getName());
			zipOutputStream.putNextEntry(zipEntry);

			// 讀取文件
			BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

			int count = 0;
			byte data[] = new byte[BUFFER];
			while ((count = bis.read(data, 0, BUFFER)) != -1) {
				zipOutputStream.write(data, 0, count);
			}
			bis.close();
			zipOutputStream.closeEntry();
		} catch (Exception e) {
			throw new Exception(e.getMessage(),e);
		}
	}


	public static void main(String[] args) {
		try {
			ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(new File("D:/a/a.zip")));
			zipOutputStream.setEncoding(CHAR_SET);

			List<File> files = new ArrayList<File>();
			files.add(new File("D:\\a\\b\\1.jpg"));
			files.add(new File("D:\\a\\b\\2.jfif"));

			if (CollectionUtils.isEmpty(files) == false) {
				for (int i = 0,size = files.size(); i < size; i++) {
					compress(files.get(i), zipOutputStream, BASE_DIR);
				}
			}
			// 沖刷輸出流
			zipOutputStream.flush();
			// 關(guān)閉輸出流
			zipOutputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

頁面下載方法的接口

業(yè)務(wù)邏輯可跟需求修改,這里主要是查詢數(shù)據(jù)庫得出文件名,根據(jù)自己需求構(gòu)建分級文件名,存入集合,循環(huán)將對應(yīng)的文件存放到文件夾里,調(diào)用工具類打成壓縮包下載。

	/**
	 * 打包下載
	 */
	@RequestMapping(value = "/packdownload", method = RequestMethod.GET)
	public void packdownload(HttpSession session, HttpServletRequest request, HttpServletResponse response) {
		PrintWriter outWriter = null;
		try {
			//查詢條件
			String loanId = request.getParameter("loanId")==null?"":request.getParameter("loanId").trim();
			String contNo = request.getParameter("contNoStr")==null?"":request.getParameter("contNoStr").trim();
			
			Criteria cri = new Criteria();
			cri.clear();
			//業(yè)務(wù)需求 查詢文件的條件
			if(StringUtils.isNotBlank(loanId) && !loanId.equals("")){
				cri.put("loanId",loanId);
			}
			//查詢出來的文件集合
			List<TFileConfig> tFileConfigList = fileConfigService.selectByCondition(cri);
			if(tFileConfigList != null && tFileConfigList.size() > 0){
				String zipName = contNo + "信貸檔案信息.zip";
				response.setContentType("application/octet-stream");// 指明response的返回對象是文件流
				response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(zipName, "UTF-8"));
				ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
				zipOutputStream.setMethod(ZipOutputStream.DEFLATED);//設(shè)置壓縮方法

				try {
					//以下代碼為 根據(jù)自己所需條件查詢數(shù)據(jù)庫得出文件夾名 構(gòu)建二級文件夾名
					List<File> files = new ArrayList<File>();
					List<String> totalFolderList = new ArrayList<String>();
					TFileConfig fileConfig = null;
					for (int i = 0;i < tFileConfigList.size(); i++){
						fileConfig = tFileConfigList.get(i);
						cri.clear();
						cri.put("loanConfigId",fileConfig.getLoanConfigId());
						List<TLoanConfig> loanConfigList = tLoanConfigService.selectByCondition(cri);		//根據(jù)loanConfigId 查找對應(yīng) 的 配置類名
						if(loanConfigList != null && loanConfigList.size() > 0){
							String folderName = loanConfigList.get(0).getLoanConfigName();	//子類文件名
							cri.clear();
							cri.put("superIds",loanConfigList.get(0).getSuperId());
							List<TLoanConfig> superConfigList = tLoanConfigService.selectByCondition(cri);
							if(superConfigList != null && superConfigList.size() > 0){
								TLoanConfig config = superConfigList.get(0);
								String superConfigName = config.getLoanConfigName();	//父類文件夾名
								totalFolderList.add(superConfigName + "\\" + folderName + "\\");	//構(gòu)建二級文件夾名
							}	
							files.add(new File(fileConfig.getRealPath()));
						}
					}
					if (CollectionUtils.isEmpty(files) == false) {
						for (int i = 0,size = totalFolderList.size(); i < size; i++) {
							//調(diào)用工具類方法
							ZipUtiles.compress(files.get(i), zipOutputStream, totalFolderList.get(i));
					}
					response.flushBuffer();
					// 沖刷輸出流
					zipOutputStream.flush();
					zipOutputStream.finish();
					// 關(guān)閉輸出流
					zipOutputStream.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}else{
				outWriter = response.getWriter();
				outWriter.println("<script>alert('該日期暫無文件')';</script>");
				return;
			}
		} catch (Exception e) {
			try {
				outWriter = response.getWriter();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			logger.error("ImportfileController.java-packdownload-Exception: ", e);
			outWriter.println("<script>alert('下載異常')';</script>");
			return;
		}
	}

頁面下載調(diào)用后臺接口

function subFrm(){
      var options = {
        dataType: 'json',
        iframe:	false,
        resetForm: true,
        success: function(data) {
          debugger;
          if(data.code == 1){
              layer.alert('校驗成功', {icon: 1},function(index){
                var url = pcs.common.path + '/admin/sysfiles/packdownload?loanId=' + $("#loanId").val() +  "&contNoStr=" + $("#contNoStr").val();
                window.location.href = url;
                  //關(guān)閉彈窗
                  setTimeout(function () {
                    var index = parent.layer.getFrameIndex(window.name);
                    parent.layer.close(index);
                  }, 500)

              });
          }else{
              layer.alert(data.msg, {icon: 2});
          }
        },
        error:function(){
            layer.alert('頁面已過期,請刷新', {icon: 2},function(){
                window.location.href = pcs.common.path + '/admin/user/confirmPwd';
            });
        }
      };
      $.ajaxSetup({contentType:'application/x-www-form-urlencoded;charset=utf-8'});
      $('#frm').ajaxSubmit(options);
    }

這是頁面文件的展示頁

點擊下載即可打包文件,下載壓縮包。

下載成功的展示

解壓后的文件

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java進程異常故障定位及排查過程

    Java進程異常故障定位及排查過程

    這篇文章主要介紹了Java進程異常故障定位及排查過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • java中StringBuffer的length()和capacity()方法對比

    java中StringBuffer的length()和capacity()方法對比

    這篇文章主要介紹了java中StringBuffer的length()和capacity()方法對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java使用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)

    Java使用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)

    AI已經(jīng)在各行各業(yè)中廣泛應(yīng)用,助力于各式各樣的業(yè)務(wù),而在機器人對話中,我們可以通過利用百度AI中的自然語言處理、問答知識圖譜等技術(shù),使機器人可以更加智能化、自然化的為用戶服務(wù),本文介紹Java利用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)
    2024-01-01
  • 兩種Eclipse部署動態(tài)web項目方法

    兩種Eclipse部署動態(tài)web項目方法

    這篇文章主要介紹了兩種Eclipse部署動態(tài)web項目方法,需要的朋友可以參考下
    2015-11-11
  • SpringBoot3集成Quartz的示例代碼

    SpringBoot3集成Quartz的示例代碼

    Quartz由Java編寫的功能豐富的開源作業(yè)調(diào)度框架,可以集成到幾乎任何Java應(yīng)用程序中,并且能夠創(chuàng)建多個作業(yè)調(diào)度,在實際的業(yè)務(wù)中,有很多場景依賴定時任務(wù),比如常見的:訂單超時處理,業(yè)務(wù)識別和預(yù)警通知等,本文介紹了SpringBoot3如何集成Quartz
    2023-08-08
  • Java 中的位運算與移位運算詳解

    Java 中的位運算與移位運算詳解

    這篇文章主要為大家介紹了Java 中的位運算與移位運算,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Java集合中的LinkedHashSet源碼解讀

    Java集合中的LinkedHashSet源碼解讀

    這篇文章主要介紹了Java集合中的LinkedHashSet源碼解讀,在LinkedHashMap中,雙向鏈表的遍歷順序通過構(gòu)造方法指定,如果沒有指定,則使用默認順序為插入順序,即accessOrder=false,需要的朋友可以參考下
    2023-12-12
  • Java并發(fā)編程示例(二):獲取和設(shè)置線程信息

    Java并發(fā)編程示例(二):獲取和設(shè)置線程信息

    這篇文章主要介紹了Java并發(fā)編程示例(二):獲取和設(shè)置線程信息,本文是系列文章的第二篇,本文著重講解Thread類的幾個重要屬性,需要的朋友可以參考下
    2014-12-12
  • Java中字符串轉(zhuǎn)時間與時間轉(zhuǎn)字符串的操作詳解

    Java中字符串轉(zhuǎn)時間與時間轉(zhuǎn)字符串的操作詳解

    Java 的 java.time 包提供了強大的日期和時間處理功能,通過 DateTimeFormatter 可以輕松地在日期時間對象和字符串之間進行轉(zhuǎn)換,下面小編給大家詳細介紹一下Java中字符串轉(zhuǎn)時間與時間轉(zhuǎn)字符串的操作,需要的朋友可以參考下
    2025-04-04
  • JDBC使用游標實現(xiàn)分頁查詢的方法

    JDBC使用游標實現(xiàn)分頁查詢的方法

    這篇文章主要介紹了JDBC使用游標實現(xiàn)分頁查詢的方法,實例分析了jdbc查詢過程中游標的使用及查詢分頁相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08

最新評論

德保县| 山阴县| 麟游县| 江北区| 宜川县| 资源县| 平利县| 波密县| 玉林市| 淮滨县| 两当县| 江津市| 荥经县| 鹤壁市| 柳江县| 定远县| 高阳县| 长泰县| 湘阴县| 德格县| 涞源县| 辰溪县| 武穴市| 宝鸡市| 岫岩| 揭东县| 乌苏市| 纳雍县| 禄丰县| 定远县| 隆昌县| 随州市| 东光县| 昭苏县| 浑源县| 左贡县| 留坝县| 二手房| 固阳县| 汽车| 嘉义县|