国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java的zip文件壓縮與解壓:ZipInputStream,ZipOutputStream

這篇具有很好參考價值的文章主要介紹了Java的zip文件壓縮與解壓:ZipInputStream,ZipOutputStream。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

文件壓縮 ZipOutputStream

?? 用ZipOutputStream來壓縮一個文件夾時,要搭配ZipEntry來使用。ZipEntry是用來創(chuàng)建壓縮文件的。

??舉個例子,向壓縮文件中添加一個文件的代碼:

//zipOut:壓縮文件的路徑
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOut));
//zipOutputStream.putNextEntry()  ====> 向壓縮包中添加一個文件
//new ZipEntry("text1.txt") ======? zip壓縮包中文件都是用ZipEntry對象,
//"text1.txt"===》是文件在壓縮文件的路徑,text1.txt表示在壓縮文件的根路徑

zipOutputStream.putNextEntry(new ZipEntry("text1.txt"));

如下圖:
java zip,java,ZipInputStream,ZipOutputStream,zip


??在創(chuàng)建ZipEntry對象時可以指定文件在壓縮包的位置:new ZipEntry(“second-dir\second-01.txt”)


java zip,java,ZipInputStream,ZipOutputStream,zip
??在使用ZipOutputStream壓縮文件時要注意的地方就是這些,下面給一個壓縮文件的代碼:



    static final int  BUFFER_SIZE = 4 << 10;
    /**
     * 壓縮指定目錄下的所有文件
     * @param dir 指定壓縮目錄
     * @param destZipName 指定壓縮包名字
     */
    public void zip(String dir,String zipPath,String destZipName) throws IOException {
        File file = new File(dir);
        /**1.為zip文件創(chuàng)建目錄*****/
        String path = file.getParentFile().getAbsolutePath();
        if(isNull(destZipName))destZipName = file.getName()+".zip";
        if(isNull(zipPath)) zipPath = path;
        String zipOut = zipPath + File.separator + destZipName;
        File zipOutFile = new File(zipOut);
        if(!zipOutFile.getParentFile().exists()){
            zipOutFile.getParentFile().mkdirs();
        }
       
        /**為zip文件創(chuàng)建目錄*****/
        ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOut));
        if(!file.isDirectory())zipOutputStream.close();
        File[] subFiles = file.listFiles();
        for (File subFile : subFiles) {
            buildZipDir(zipOutputStream,subFile,null);
        }
        zipOutputStream.close();
    }

    void buildZipDir(ZipOutputStream zipOut,File file,String baseDir) throws IOException {
        if(file.isFile()){
            String zipEntryName = baseDir == null ? file.getName() : baseDir+File.separator+file.getName();
            zipOut.putNextEntry(new ZipEntry(zipEntryName));
            byte[] buffer = new byte[BUFFER_SIZE];
            try(InputStream inputStream = new FileInputStream(file)){
                int len = -1;
                while((len = inputStream.read(buffer)) != -1){
                    zipOut.write(buffer,0,len);
                }
                zipOut.flush();
                zipOut.closeEntry();
            }
        }
        else{//文件是dir,繼續(xù)遞歸找文件
            File[] subFiles = file.listFiles();
            if(subFiles.length ==0){//處理空文件夾
                String zipName = baseDir == null ? file.getName() :baseDir + File.separator+ file.getName() ;
                zipOut.putNextEntry(new ZipEntry(zipName));
                zipOut.closeEntry();
            }else{
                for (File subFile : subFiles) {
                    String subBaseDir =baseDir == null ? file.getName() :baseDir + File.separator+ file.getName() ;
                    buildZipDir(zipOut,subFile,subBaseDir);
                }
            }
        }
    }


    public boolean isNull(String str){
        return str == null || str.equals("");
    }


測試:

    @Test
    public void testZip() throws IOException {
     String dir = "D:\\test-zip";
     //dir : 要壓縮的目錄
     //D:\\yy\\    指定壓縮文件的位置
     //path-test.zip 指定壓縮文件的名字
     zip(dir,"D:\\yy\\","path-test.zip");
    }


文件解壓:ZipInputStream

??ZipInputStream讀取壓縮文件,配合ZipFile使用;通過上面的例子,我們知道壓縮包里的是一個個ZipEntry對象,在解壓時,可以遍歷壓縮包獲取到ZipEntry對象。每一個ZipEntry對象都是一個文件,使用ZipFile可以獲取到每一個ZipEntry對象的文件流;獲取到文件流就可以將壓縮包的文件讀出來了。


    public void unZip(String zipPath,String unzipPath) throws IOException {
        File file = new File(zipPath);
        ZipFile zipFile = new ZipFile(file);//zip文件
        ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
        if(isNull(unzipPath))unzipPath = zipPath.replace(".zip","");
        ZipEntry nextEntry = null;
        while( (nextEntry = zipInputStream.getNextEntry()) != null){
            String name = nextEntry.getName();
            String fileOutPath = unzipPath + File.separator + name;
            File fileOut = new File(fileOutPath);
            if(!fileOut.getParentFile().exists()){
                fileOut.getParentFile().mkdirs();
            }
            if(!fileOut.exists()){
                fileOut.createNewFile();
            }

            OutputStream  output = new FileOutputStream(fileOutPath);
            InputStream inputStream = zipFile.getInputStream(nextEntry);//通過ZipFile獲取到ZipEntry的文件流
            int read = -1;
            byte[] buffer = new byte[BUFFER_SIZE];
            while((read = inputStream.read(buffer) ) != -1){
                output.write(buffer,0, read);
            }
            output.flush();
            output.close();
            inputStream.close();
        }
        zipInputStream.close();
        zipFile.close();
    }



測試:

   public void testUnzip() throws IOException {
        String zip = "D:\\yy\\path-test.zip";
        unZip(zip,null);
    }


java zip,java,ZipInputStream,ZipOutputStream,zip文章來源地址http://www.zghlxwxcb.cn/news/detail-602592.html

到了這里,關(guān)于Java的zip文件壓縮與解壓:ZipInputStream,ZipOutputStream的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 微信小程序下載zip壓縮包后解壓,并且打開文件查看的內(nèi)容

    微信小程序下載zip壓縮包后解壓,并且打開文件查看的內(nèi)容

    ? ? ? ? 在開發(fā)pc端后臺管理系統(tǒng)的時候,經(jīng)常會遇到這樣的需求:下載zip到本地,然后用戶雙擊壓縮包,并借助電腦端的壓縮軟件打開壓縮包,就可以查看里面的word、excel、pdf文件里面的內(nèi)容。(這種需求,毫無疑問,對于我們前端開發(fā)工程師來說,已經(jīng)是習以為常了)。

    2024年02月08日
    瀏覽(45)
  • Linux(Centos7)基本操作(1):文件壓縮和解壓(tar、zip)

    安裝命令 yum install -y unzip zip 壓縮文件: 基本格式: zip [參數(shù)] [壓縮后的文件名] [打包的目錄路徑] 壓縮文件:xxx是當前路徑中需要壓縮的文件夾: zip -r xxx.zip xxx/ ; 比如需要壓縮文件夾 a 下所有的內(nèi)容,就執(zhí)行 zip -r a.zip a ; 如果是將其他目錄下的文件壓縮到當前路徑,xxx前面

    2024年02月08日
    瀏覽(27)
  • 輕量級力量:深入MiniZip庫,實現(xiàn)C++中ZIP文件的簡便壓縮與解壓

    輕量級力量:深入MiniZip庫,實現(xiàn)C++中ZIP文件的簡便壓縮與解壓

    ? MiniZip是一個輕量級的壓縮庫,它是zlib庫的一部分,用于在C++中進行ZIP文件的壓縮和解壓縮操作。以下是MiniZip的一些功能和優(yōu)點: 功能: 創(chuàng)建ZIP文件: ?MiniZip可以用于創(chuàng)建包含一個或多個文件的ZIP歸檔。 壓縮: ?MiniZip支持使用不同的壓縮算法對文件進行壓縮,例如DEFL

    2024年02月04日
    瀏覽(23)
  • Linux 壓縮、解壓文件的 4 種方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    Linux 壓縮、解壓文件的方式有如下幾種: tar 是一種常用的打包工具,可以將多個文件或目錄打包成一個 tar 包,也可以將一個 tar 包解壓縮到指定的目錄。 1.1. 壓縮: 1.2. 解壓: 1.3. tar 命令各參數(shù)含義 tar 命令是 Linux 下常用的打包和壓縮工具,用于將多個文件或目錄打包成一

    2024年02月10日
    瀏覽(36)
  • 【Linux筆記】壓縮、解壓文件的 4 種方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    【Linux筆記】壓縮、解壓文件的 4 種方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    目錄 1、使用 tar 命令: 1.1. 壓縮: 1.2. 解壓: 1.3. tar 命令各參數(shù)含義 2. gzip、gunzip gzip 命令: 壓縮文件: 保留原始文件,創(chuàng)建壓縮文件: 保留原始文件,顯示壓縮進度: gunzip 命令: 解壓文件: 保留壓縮文件,創(chuàng)建原始文件: 保留壓縮文件,顯示解壓進度: 3. zip、unzip

    2024年02月03日
    瀏覽(26)
  • java解壓zip文件

    java解壓zip文件

    zip文件目錄結(jié)構(gòu)如下: 其中,word下面還有多個子目錄,可以遞歸進行解壓目錄,核心代碼如下:

    2024年02月11日
    瀏覽(26)
  • linux_文件壓縮、文件解壓(gzip命令、gunzip 命令、bzip2命令、bunzip2命令、tar命令、rar命令、zip命令)

    接上一篇:linux用戶管理(查看在線用戶who命令、創(chuàng)建用戶adduser命令、創(chuàng)建用戶組groupadd命令、查看用戶組groups命令、刪除用戶、設(shè)置用戶密碼passwd命令) 本次來分享怎樣在 linux中壓縮和解壓文件夾 ,在linux中壓縮解壓的方式有 5種 ,分別是 gz格式壓縮解壓、bz2格式壓縮解壓、

    2024年02月01日
    瀏覽(23)
  • zip解壓和壓縮

    引言 介紹zip文件的概念 涉及到的Java類和包: java.util.zip https://blog.csdn.net/u012998680/article/details/126060855 壓縮文件 準備壓縮的源文件和目標zip文件的路徑 創(chuàng)建 FileOutputStream 和 ZipOutputStream 對象 創(chuàng)建源文件的 File 和 FileInputStream 對象 創(chuàng)建 ZipEntry 對象,并設(shè)置其名稱為源文件的名

    2024年02月11日
    瀏覽(30)
  • Qt 編譯使用Bit7z庫接口調(diào)用7z.dll、7-Zip.dll解壓壓縮常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

    Qt 編譯使用Bit7z庫接口調(diào)用7z.dll、7-Zip.dll解壓壓縮常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

    bit7z 一個c++靜態(tài)庫,為 7-zip 共享庫提供了一個干凈簡單的接口 使用 CMAKE 重新編譯 github 上的 bit7z 庫,用來解壓/預(yù)覽 iso9660 , WIm , Zip , Rar 等常用的壓縮文件格式。 z-zip 庫支持大多數(shù)壓縮文件格式 bit7z 是一個跨平臺的c++靜態(tài)庫,它允許通過一個干凈簡單的包裝器接口從7-

    2024年02月11日
    瀏覽(97)
  • Qt 編譯使用Bit7z庫接口調(diào)用7z.dll、7-Zip.dll解壓壓縮常用Zip、ISO9660、Wim、Esd、7z等格式文件(二)

    修改qt5 7zip源碼編譯及使用(含展示進度)一文中的封裝類ZlibHelper代碼類,繼承多線程,使解壓,壓縮時進度條不影響界面,同時添加壓縮文件中的文件預(yù)覽功能,建議直接看源碼 lib_bit7z.h 頭文件代碼

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包