在线观看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
    +關注

    關注

    20

    文章

    2982

    瀏覽量

    106456
  • Zip
    Zip
    +關注

    關注

    0

    文章

    17

    瀏覽量

    8719
  • 壓縮
    +關注

    關注

    2

    文章

    102

    瀏覽量

    19574
  • 文件
    +關注

    關注

    1

    文章

    575

    瀏覽量

    25102
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    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 ?2672次閱讀

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

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

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

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

    linux解壓gz文件的命令

    在Linux系統,可以使用gzip命令解壓.gz文件。gzip命令用于壓縮解壓縮文件,使用方法如下:
    的頭像 發表于 11-08 14:42 ?6178次閱讀
    主站蜘蛛池模板: 一日本道加勒比高清一二三 | 色妞女女女女女bbbb | 5g影院天天爽 | 免费视频你懂得 | 午夜三级视频 | 国产毛片久久久久久国产毛片 | 成 人网站免费 | 亚洲综合色婷婷久久 | 黄 色 免 费 网站在线观看 | 日本最黄视频 | 国产大片91精品免费观看不卡 | 免费观看一级特黄欧美大片 | 2018天天干天天射 | 日本三级强在线观看 | 国产国语videosex另类 | 国产精品美乳在线观看 | 午夜精品福利影院 | 天天躁日日躁狠狠躁中文字幕老牛 | 女人张开腿男人桶 | 日本免费色 | 99精品国产高清自在线看超 | 久久精品久久久 | 国产日韩精品一区二区三区 | 欧美 ed2k| 亚洲综合亚洲综合网成人 | 亚洲一本之道在线观看不卡 | 国产成人亚洲综合a∨婷婷 国产成人一区二区三中文 国产成人一区二区在线不卡 | 寡妇影院首页亚洲图片 | 一本大道高清在线视频 视频 | 在线免费看一级片 | 亚洲成在人天堂一区二区 | 激情欧美在线 | 1024视频在线观看国产成人 | 欧美 日韩 中文字幕 | 日韩一级免费视频 | 西西人体大胆高清啪啪欧洲 | 国产高清免费午夜在线视频 | 激情五月在线 | 久久99热精品 | 国产网站黄 | 久久视频免费 |