色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

java 項(xiàng)目總是有上傳 zip 包和下載 zip 包的需求,這時(shí)就得用 ZipInputStream 和 ZipOutputStream 類。

基礎(chǔ)概念

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

壓縮

壓縮文件就是先讀取一個(gè)文件夾的內(nèi)容,創(chuàng)建 ZipEntry 放入 ZipOutputStream 下,然后用 InputStream 讀取源文件內(nèi)容并寫入 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 + " 已經(jīng)存在");
        return;
    }

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

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

                // 讀取待壓縮的文件并寫進(jìn)壓縮包里
                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();
    }
}

解壓

一個(gè)壓縮文件就是一個(gè)特殊的 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);
                        //判斷路徑是否存在,不存在則創(chuàng)建文件路徑
                        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();
        }
    }

總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2974

    瀏覽量

    104984
  • Zip
    Zip
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8654
  • 壓縮
    +關(guān)注

    關(guān)注

    2

    文章

    102

    瀏覽量

    19396
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    570

    瀏覽量

    24803
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    WinRAR壓縮文件我們該知道的幾個(gè)點(diǎn)【jiasuba】

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

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

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

    樹莓派壓縮文件

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

    解讀Linux :先從創(chuàng)建一個(gè)文件夾用來存放jdk壓縮文件開始

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

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

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

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

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

    Linux如何壓縮文件

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

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

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

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

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

    使用Python對壓縮文件的處理

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

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

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

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

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

    linux解壓gz文件的命令

    在Linux系統(tǒng),可以使用gzip命令解壓.gz文件。gzip命令用于壓縮解壓縮文件,使用方法如下:
    的頭像 發(fā)表于 11-08 14:42 ?5796次閱讀
    主站蜘蛛池模板: 国产精品久久久久久无码专区 | 护士被老头边摸边吃奶的视频 | 日韩欧无码一区二区三区免费不卡 | 亚洲精品喷白浆在线观看 | 少妇连续高潮抽搐痉挛昏厥 | 九九热在线视频观看这里只有精品 | 美女挑战50厘米长的黑人 | 中文字幕亚洲无线码高清不卡 | 黄色片网站下载 | 久久亚洲精品无码A片大香大香 | 亚洲精品久久久无码一区二区 | 国产精品久久久久婷婷五月色 | 免费看欧美xxx片 | 午夜伦4480yy妇女久久 | 一品探花论坛 | 黑人干肥婆 | 欧美亚洲日韩在线在线影院 | 色姊姊真舒服 | 国产综合欧美区在线 | 午夜一个人在线观看完整版 | 我的好妈妈8高清在线观看WWW | 天美传媒在线观看完整高清 | 东北嫖妓对白粗口 | 囯产少妇BBBBBB高潮喷水一 | 精品国产成人系列 | 天天看学生视频 | 无码国产成人午夜在线观看不卡 | 亚洲 色 欧美 爱 视频 日韩 | 国产成久久免费精品AV片天堂 | 久久精品免费观看久久 | 边做边爱BD免费看片 | 我的奶头被客人吸的又肿又红 | 久草免费视频在线观看 | 无码人妻视频又大又粗欧美 | 手机看片国产日韩欧美 | 精品免费久久久久久影院 | 亚洲精品久久久久久久蜜臀老牛 | 男生扒开美女尿口戳戳 | 紧致肉肉高h | 婷婷久久综合九色综合伊人色 | 在线不卡日本v二区到六区 在线不卡日本v二区 |