在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

java中的壓縮文件是如何解壓與壓縮的

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-10 15:49 ? 次閱讀

java 項目總是有上傳 zip 包和下載 zip 包的需求,這時就得用 ZipInputStream 和 ZipOutputStream 類。

基礎概念

  1. ZipOutputStream:是一種 FilterInputStream 、裝飾器模式中的實現類,它可以直接讀取zip 包的內容
    1. ZipOutputStream (OutputStream out):zip 輸出流
    2. ZipEntry(String name):表示壓縮文件中的一個文件或者目錄
    3. void putNextEntry(ZipEntry e):寫入新的壓縮文件或者目錄
  2. ZipIutputStream:是一種 FilterOutputStream, 可以實現 zip 文件的解壓
    1. ZipIutputStream (IutputStream out):zip 輸入流
    2. ZipEntry getNextEntry():得到壓縮文件中的一個文件或者目錄

壓縮

壓縮文件就是先讀取一個文件夾的內容,創建 ZipEntry 放入 ZipOutputStream 下,然后用 InputStream 讀取源文件內容并寫入 ZipOutputStream。

/**
    * 壓縮文件
    * @param sourceFilePath 待壓縮的文件路徑
    * @param zipFilePath    壓縮后存放路徑
    * @return
    */
public static void zip(String sourceFilePath, String zipFilePath) {
    File sourceFile = new File(sourceFilePath);

    if (!sourceFile.exists()) {
        System.out.println(sourceFilePath + " 不存在");
        return;
    }
    File zipFile = new File(zipFilePath);
    if (zipFile.exists()) {
        System.out.println(zipFilePath + " 已經存在");
        return;
    }

    try {
        byte[] buffer = new byte[1024];
        try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)))){

            for(File file: sourceFile.listFiles()) {
                // 創建 ZIP 中的文件,并添加進壓縮包
                ZipEntry zipEntry = new ZipEntry(file.getName());
                zos.putNextEntry(zipEntry);

                // 讀取待壓縮的文件并寫進壓縮包里
                try (InputStream bis = new BufferedInputStream(new FileInputStream(file))){
                    int read = 0;
                    while ((read = bis.read(buffer)) != -1) {
                        zos.write(buffer, 0, read);
                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

解壓

一個壓縮文件就是一個特殊的 File 叫做 ZipFile,用 Enumeration 類取出 zip 文件中被壓縮的文件。

List< String > fileNames=new ArrayList<  >();
try{
    ZipFile zipFile=new ZipFile(path, Charset.forName("gbk"));
    
    Enumeration< ? extends ZipEntry > entries = zipFile.entries();
    while(entries.hasMoreElements()){
        String fileName=entries.nextElement().getName();
        fileNames.add(fileName);
        System.out.println("文件名稱: "+fileName);
    }
}catch (Exception  e){
    e.printStackTrace();
}

解壓文件 就是先用 zipFile.entries() 讀取壓縮文件夾中的文件, 生成 InputStream 流后寫入被解壓的 輸出流

/**
     * 解壓
     * @param zipPath zip 文件夾路徑
     * @param targetPath 解壓路徑
     */
    public static void unzip(String zipPath,String targetPath){

        File pathFile = new File(targetPath);
        if(!pathFile.exists()){
            pathFile.mkdirs();
        }

        try{
            //指定編碼
            try(ZipFile zipFile = new ZipFile(zipPath, Charset.forName("gbk"))) {
                //遍歷里面的文件及文件夾
                Enumeration entries = zipFile.entries();
                while (entries.hasMoreElements()) {
                    ZipEntry entry = (ZipEntry) entries.nextElement();
                    String zipEntryName = entry.getName();

                    try (InputStream in = zipFile.getInputStream(entry)) {
                        String outpath = (targetPath + File.separator + zipEntryName);
                        //判斷路徑是否存在,不存在則創建文件路徑
                        File file = new File(outpath.substring(0, outpath.lastIndexOf(File.separator)));
                        if (!file.exists()) {
                            file.mkdirs();
                        }
                        //判斷文件全路徑是否為文件夾
                        if (new File(outpath).isDirectory())
                            continue;

                        try (OutputStream out = new FileOutputStream(outpath)) {
                            byte[] buffer = new byte[1024];
                            int len;
                            while ((len = in.read(buffer)) > 0) {
                                out.write(buffer, 0, len);
                            }
                        }
                    }
                }
            }
        }catch ( Exception e){
            e.printStackTrace();
        }
    }

總結

介紹了一下 java 中的壓縮文件是如何解壓與壓縮的,對小伙伴們有幫助的話就點個贊哦。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2976

    瀏覽量

    105220
  • Zip
    Zip
    +關注

    關注

    0

    文章

    17

    瀏覽量

    8662
  • 壓縮
    +關注

    關注

    2

    文章

    102

    瀏覽量

    19433
  • 文件
    +關注

    關注

    1

    文章

    571

    瀏覽量

    24834
收藏 人收藏

    評論

    相關推薦

    如何在Linux使用unzip命令在終端解壓縮文件

    ZIP是最廣泛使用的存檔文件格式,支持無損數據壓縮。ZIP文件是一個數據容器,其中包含一個或多個壓縮文件或目錄。
    發表于 12-08 16:52 ?4865次閱讀

    Linux中常用的壓縮解壓縮命令介紹

    在Linux壓縮解壓縮文件是常見的操作。有時候,我們需要將大文件壓縮成較小的文件,以便于傳
    發表于 07-31 11:50 ?2282次閱讀

    WinRAR壓縮文件我們該知道的幾個點【jiasuba】

    真正做到事半功倍。1.制作自解壓文件  如果你平時使用Win7系統下載的WinRAR來壓縮文件,而你的朋友也不會使用WinRAR,但你的數據又確實必須壓縮后才能夠給他。這時,我們就可以
    發表于 03-14 09:47

    壓縮文件可以使用pdf壓縮器嗎

    `  壓縮文件可以使用pdf壓縮器嗎?現在很多辦公人員都會編輯各種文檔格式的文件,也都掌握了將其它可編輯格式轉換為PDF文件格式的方法,但是有時候PDF
    發表于 10-27 14:03

    樹莓派壓縮文件

    請問各位,怎么用樹莓派壓縮文件夾?
    發表于 09-13 10:03

    解讀Linux :先從創建一個文件夾用來存放jdk壓縮文件開始

    1 創建一個文件夾用來存放jdk壓縮文件mkdir /home/test/tar2 把下載好的jdk壓縮文件上傳到linux對應目錄3 創建jdk解壓目錄mkdir /usr/loca
    發表于 07-04 08:06

    在 Linux 上壓縮文件的 5 種方法

    在 Linux 上壓縮文件的 5 種方法 在 Linux 系統上有很多可以用于壓縮文件的工具,但它們的表現并不都是一樣的,也不是所有的壓縮效果都是一樣的。在這篇文章,我們比較其中的
    發表于 05-07 15:25

    在 Linux 上壓縮文件的 5 種方法

    的意思是一樣的 – tar 和 gz 的組合來顯示文件是一個壓縮的 tar 文件。在壓縮完成后,你將同時得到原始文件
    發表于 05-13 15:45

    Linux如何壓縮文件

    在Linux上壓縮文件的5種方法
    發表于 12-30 08:00

    JAVA教程之用GZIP壓縮解壓文件

    JAVA教程之用GZIP壓縮解壓文件,很好的JAVA的資料,快來學習吧
    發表于 04-11 17:28 ?6次下載

    壓縮文件管理器WinRAR安裝程序下載

    壓縮文件管理器WinRAR安裝程序下載
    發表于 08-31 10:45 ?15次下載

    使用Python對壓縮文件的處理

    zipfile是Python里用來做zip格式編碼的壓縮解壓縮的module,zipfile里有兩個非常重要的class:ZipFile和ZipInfo。ZipFile是主要的類,用來創建和讀取zip文件,而ZipInfo是存
    的頭像 發表于 03-29 11:29 ?2576次閱讀

    鈦金系列壓縮與非壓縮文件多鏡像問題

    根據客戶的反饋和需求,我們做了一個Ti60壓縮與非壓縮文件的多鏡像與加載時間的驗證。
    的頭像 發表于 12-01 10:16 ?890次閱讀
    鈦金系列<b class='flag-5'>壓縮</b>與非<b class='flag-5'>壓縮文件</b>多鏡像問題

    如何在Linux上使用Pigz來更快地壓縮文件

    Pigz是一款快速壓縮文件的工具,它能夠使用多個CPU核心進行壓縮,使得壓縮速度得到了極大的提升。在本文中,我們將介紹如何在Linux上使用Pigz來更快地壓縮文件
    的頭像 發表于 05-12 16:42 ?2245次閱讀
    如何在Linux上使用Pigz來更快地<b class='flag-5'>壓縮文件</b>

    linux解壓gz文件的命令

    在Linux系統,可以使用gzip命令解壓.gz文件。gzip命令用于壓縮解壓縮文件,使用方法如下:
    的頭像 發表于 11-08 14:42 ?5837次閱讀
    主站蜘蛛池模板: 日韩在线毛片 | 一区二区三区免费精品视频 | 免费视频国产 | 午夜影院视频 | 国产码一区二区三区 | 日韩欧美亚洲综合一区二区 | 久久精品免费看 | 91久久夜色精品国产网站 | 国产激爽大片在线播放 | 久久婷五月 | 欧洲mv日韩mv国产mv | 欧美极品第一页 | 一区精品视频 | 午夜在线亚洲男人午在线 | 精品久久久久久中文字幕欧美 | 天天操夜夜艹 | 4480yy私人午夜a级国产 | 6080午夜 | 永久免费人成网ww555kkk手机 | 热re久久精品国产99热 | 花怜write. as| 奇米影视亚洲狠狠色777不卡 | 鲁老汉精品视频在线观看 | 色老头综合 | 免费大片黄在线观看日本 | 色综合天天综合网看在线影院 | 色播亚洲 | 加勒比一区二区 | 黄色生活毛片 | 日韩成a人片在线观看日本 日韩成人黄色 | 好爽好黄的视频 | h黄视频在线观看 | 丁香在线 | 优优色综合 | 日日噜噜夜夜狠狠va视频 | 特黄特黄 | 五月婷婷激情在线 | 三级完整在线观看高清视频 | 狠狠干狠狠爱 | 高清一级毛片一本到免费观看 | 欧美一卡2卡三卡四卡五卡 欧美一卡二卡3卡4卡无卡六卡七卡科普 |