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

java ZipFile如何將多級(jí)目錄壓縮

 更新時(shí)間:2024年08月26日 09:18:29   作者:愛穿襯衫的張某某  
這篇文章主要介紹了java ZipFile如何將多級(jí)目錄壓縮問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java ZipFile將多級(jí)目錄壓縮

在 Java 中,可以使用 java.util.zip 包中的 ZipOutputStream 和 ZipEntry 類來壓縮多級(jí)目錄。

一個(gè)例子

展示如何遞歸地將一個(gè)目錄及其所有子目錄和文件壓縮到一個(gè) ZIP 文件中:

import java.io.*;
import java.nio.file.*;
import java.util.zip.*;

public class ZipDirectory {
    public static void main(String[] args) throws IOException {
        String sourceDirPath = "path/to/source/directory";
        String zipFilePath = "path/to/output.zip";

        try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
            Path sourceDir = Paths.get(sourceDirPath);
            Files.walk(sourceDir)
                 .filter(path -> !Files.isDirectory(path))
                 .forEach(path -> {
                      ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString());
                      try {
                          zipOut.putNextEntry(zipEntry);
                          Files.copy(path, zipOut);
                          zipOut.closeEntry();
                      } catch (IOException e) {
                          System.err.println("Failed to add file to ZIP: " + path);
                          e.printStackTrace();
                      }
                 });
        }
    }
}

這個(gè)程序?qū)⒈闅v指定目錄(包括子目錄)的所有文件,并將它們添加到 ZIP 文件中。

步驟解析

  • 使用 Files.walk 方法遞歸遍歷源目錄。
  • 對(duì)于每個(gè)非目錄文件,創(chuàng)建一個(gè)相對(duì)路徑的 ZipEntry。
  • 將文件內(nèi)容復(fù)制到 ZipOutputStream。

請(qǐng)根據(jù)實(shí)際情況替換 sourceDirPath 和 zipFilePath。此外,請(qǐng)確保適當(dāng)處理異常并關(guān)閉資源以避免資源泄漏。

Java多級(jí)目錄導(dǎo)出文件壓縮包

                //創(chuàng)建臨時(shí)文件
                File zipFile = File.createTempFile("test", ".zip");
                Path temp = Files.createTempDirectory(null);
                String srcImgPath = temp.toString();
 
                for( 循環(huán) ){
                     String outImgPath = srcImgPath + "/aa/bb/cc";
                     File outImgFile = new File(outImgPath);
                     //如果文件夾不存在則創(chuàng)建
                     if (!outImgFile.exists() && !outImgFile.isDirectory()) {
                            outImgFile.mkdirs();
                     }
                    FileOutputStream outImgStream = new FileOutputStream(outImgPath + "/" + name);
                    ImageIO.write(bufImg, imgSuffix, outImgStream);
                    outImgStream.flush();
                    outImgStream.close();
                }
 
                ZipUtil.zip(srcImgPath, zipFile.getAbsolutePath(), true);
 
                String header = request.getHeader("User-Agent").toUpperCase();
                String fileName = "附件信息" + System.currentTimeMillis() + ".zip";
                if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
                    fileName = URLEncoder.encode(fileName, "utf-8");
                    //IE下載文件名空格變+號(hào)問題
                    fileName = fileName.replace("+", "%20");
                } else {
                    fileName = new String(fileName.getBytes(), "ISO8859-1");
                }
                response.reset();
                response.setContentType("text/plain");
                response.setContentType("application/octet-stream; charset=utf-8");
                response.setHeader("Location", fileName);
                response.setHeader("Cache-Control", "max-age=0");
                response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
 
                FileInputStream fis = new FileInputStream(zipFile);
                BufferedInputStream buff = new BufferedInputStream(fis);
                BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
                byte[] car = new byte[1024];
                int l = 0;
                while (l < zipFile.length()) {
                    int j = buff.read(car, 0, 1024);
                    l += j;
                    out.write(car, 0, j);
                }
                // 關(guān)閉流
                fis.close();
                buff.close();
                out.close();
                // 刪除臨時(shí)文件
                zipFile.delete();
                FileUtil.deleteDir(srcImgPath);

總結(jié)

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

相關(guān)文章

  • Spring的InitializingBean接口解析

    Spring的InitializingBean接口解析

    這篇文章主要介紹了Spring的InitializingBean接口解析,InitializingBean是spring為bean的初始化提供了一種新的方式,里面只有一個(gè)方法afterPropertiesSet,作用就是實(shí)現(xiàn)這個(gè)接口或者實(shí)現(xiàn)了繼承InitializingBean的方法的bean都要執(zhí)行這個(gè)方法,需要的朋友可以參考下
    2024-02-02
  • 基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實(shí)現(xiàn)代碼

    基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實(shí)現(xiàn)代碼

    這篇文章主要介紹了基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實(shí)現(xiàn),會(huì)使用到多個(gè)數(shù)據(jù)源,文中通過代碼講解的非常詳細(xì),需要的朋友可以參考下
    2021-04-04
  • Java 多線程實(shí)例詳解(二)

    Java 多線程實(shí)例詳解(二)

    本文主要介紹Java 多線程的資料整理,這里整理了詳細(xì)資料及相關(guān)示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • 關(guān)于Java中阻塞隊(duì)列BlockingQueue的詳解

    關(guān)于Java中阻塞隊(duì)列BlockingQueue的詳解

    這篇文章主要介紹了關(guān)于Java中阻塞隊(duì)列BlockingQueue的詳解,BlockingQueue是為了解決多線程中數(shù)據(jù)高效安全傳輸而提出的,從阻塞這個(gè)詞可以看出,在某些情況下對(duì)阻塞隊(duì)列的訪問可能會(huì)造成阻塞,需要的朋友可以參考下
    2023-05-05
  • Spring Boot Admin的使用詳解(Actuator監(jiān)控接口)

    Spring Boot Admin的使用詳解(Actuator監(jiān)控接口)

    這篇文章主要介紹了Spring Boot Admin的使用詳解(Actuator監(jiān)控接口),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java中IO流解析及代碼實(shí)例

    Java中IO流解析及代碼實(shí)例

    下面小編就為大家?guī)硪黄P(guān)于Java中的IO流總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-07-07
  • Java中調(diào)用DLL動(dòng)態(tài)庫(kù)的操作方法

    Java中調(diào)用DLL動(dòng)態(tài)庫(kù)的操作方法

    在Java編程中,有時(shí)我們需要調(diào)用本地代碼庫(kù),特別是Windows平臺(tái)上的DLL(動(dòng)態(tài)鏈接庫(kù)),本文中,我們將詳細(xì)討論如何在Java中加載和調(diào)用DLL動(dòng)態(tài)庫(kù),并通過具體示例來展示這個(gè)過程,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 探討Java語(yǔ)言中那些修飾符

    探討Java語(yǔ)言中那些修飾符

    在java中常見的修飾符有:abstract(抽象的)、static(靜態(tài)的)、public(公共的)、protected(受保護(hù)的)、private(私有的)、synchronized(同步的)、native(本地的)、transient(暫時(shí)的)、volatile(易失的)、final(不可改變的)。對(duì)java語(yǔ)言修飾符感興趣的朋友一起看看吧
    2016-11-11
  • Java判斷一個(gè)字符串是不是一個(gè)數(shù)字的解決思路

    Java判斷一個(gè)字符串是不是一個(gè)數(shù)字的解決思路

    這篇文章主要給大家介紹了關(guān)于Java判斷一個(gè)字符串是不是一個(gè)數(shù)字的解決思路,判斷一個(gè)字符串是否為數(shù)字是Java開發(fā)中很常見的業(yè)務(wù)需求,實(shí)現(xiàn)這個(gè)判斷有很多種方式,需要的朋友可以參考下
    2023-08-08
  • Java讀取或刪除Excel文件文檔屬性的解決方案

    Java讀取或刪除Excel文件文檔屬性的解決方案

    Excel文件不僅僅是數(shù)據(jù)表格,它們還承載著重要的元數(shù)據(jù),即文檔屬性,這些屬性在文件管理、信息溯源和數(shù)據(jù)合規(guī)性方面扮演著關(guān)鍵角色,本文將深入探討如何利用功能強(qiáng)大的Spire.XLS for Java庫(kù),輕松實(shí)現(xiàn)Excel文檔屬性的讀寫與刪除操作,需要的朋友可以參考下
    2025-12-12

最新評(píng)論

武清区| 宁南县| 岳普湖县| 洛阳市| 华宁县| 渭南市| 行唐县| 绍兴县| 那坡县| 大渡口区| 扎囊县| 隆子县| 墨江| 梁山县| 水城县| 松原市| 莱芜市| 山东省| 乾安县| 六安市| 内乡县| 乐业县| 罗山县| 吴堡县| 延吉市| 县级市| 元阳县| 嘉荫县| 绥中县| 城市| 滨州市| 余庆县| 宁德市| 陈巴尔虎旗| 林西县| 丹棱县| 冀州市| 北票市| 临沂市| 镇雄县| 高雄县|