日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Zip压缩实现(亲测)

發布時間:2024/9/20 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Zip压缩实现(亲测) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在自學javaWeb,先復習一下java,把還給老師的東西再找回來(知識如果不用很快就會忘記啊)。。

今天看到了zip壓縮,決定要整理一下。

java將有關zip壓縮的內容都封裝在java.util.zip寶中,用java實現zip壓縮,不用考慮壓縮算法,java已經將這些進行了封裝

實際上用java實現zip壓縮涉及的就是一個“輸入輸出流”的概念

用java實現一個文件的zip壓縮,過程可以簡單地表示為:

當然具體實現要比這個復雜一點,比如要先像zip文件中寫入目錄進入點。。如果要壓縮文件夾中的內容要遍歷文件夾中的文件和子文件夾。

先給出源代碼,再解釋:

import java.io.*; import java.util.*; import java.util.zip.*;class ZipCompress {private String zipFileName; // 目的地Zip文件private String sourceFileName; //源文件(帶壓縮的文件或文件夾)public ZipCompress(String zipFileName,String sourceFileName){this.zipFileName=zipFileName;this.sourceFileName=sourceFileName;}public void zip() throws Exception{//File zipFile = new File(zipFileName);System.out.println("壓縮中...");//創建zip輸出流ZipOutputStream out = new ZipOutputStream( new FileOutputStream(zipFileName));//創建緩沖輸出流BufferedOutputStream bos = new BufferedOutputStream(out);File sourceFile = new File(sourceFileName);//調用函數compress(out,bos,sourceFile,sourceFile.getName());bos.close();out.close();System.out.println("壓縮完成");}public void compress(ZipOutputStream out,BufferedOutputStream bos,File sourceFile,String base) throws Exception{//如果路徑為目錄(文件夾)if(sourceFile.isDirectory()){//取出文件夾中的文件(或子文件夾)File[] flist = sourceFile.listFiles();if(flist.length==0)//如果文件夾為空,則只需在目的地zip文件中寫入一個目錄進入點{System.out.println(base+"/");out.putNextEntry( new ZipEntry(base+"/") );}else//如果文件夾不為空,則遞歸調用compress,文件夾中的每一個文件(或文件夾)進行壓縮{for(int i=0;i<flist.length;i++){compress(out,bos,flist[i],base+"/"+flist[i].getName());}}}else//如果不是目錄(文件夾),即為文件,則先寫入目錄進入點,之后將文件寫入zip文件中{out.putNextEntry( new ZipEntry(base) );FileInputStream fos = new FileInputStream(sourceFile);BufferedInputStream bis = new BufferedInputStream(fos);int tag;System.out.println(base);//將源文件寫入到zip文件中while((tag=bis.read())!=-1){bos.write(tag);}bis.close();fos.close();}} } public class TestZip {public static void main(String[] args){ZipCompress zipCom = new ZipCompress("D:\\電影.zip","F:\\電影");try{zipCom.zip();}catch(Exception e){e.printStackTrace();}} }

zip()方法中首先創建了ZipOutputStream(zip輸出流)之后調用compress()方法

在compress()方法中通過遞歸完成將文件夾中的每個文件的壓縮。

具體為:

首先判斷輸入的文件是文件夾還是文件,如果是文件,直接壓縮,如果是文件夾則要遞歸調用compress()遍歷壓縮文件夾中的文件。

如果是文件,首先在zip文件中寫入一個目錄進入點(所謂目錄進入點,個人理解就是源文件在目標zip文件中的路徑)

然后用文件輸入流FileInputStream將源文件讀入內存,在用ZipOutputStream(zip輸出流)將讀入內存的數據寫入到zip文件中,這就完成了壓縮。(實際上就是輸入輸出流)

當文件夾為空的時候,只需寫入一個目錄進入點(要注意最后一定要加一個"\",表示一個目錄)。

運行結果為:

源文件:

其中文件夾1中含有兩個文件,文件夾2 為空。

壓縮后的文件為:

前面提到的空文件夾的目錄進入點一定要加"\",以表示一個文件夾,而不是一個文件,我們可以把程序中的"\"去掉,這時結果為:

可以看到本來是文件夾的文件夾2,編程了文件。所以可以把目錄進入點就理解為,源文件在zip文件中對應的路徑,這個相對路徑應該與源文件夾中的相對路徑一致,當然也可以不一致,比如我們在base前加入一個字符串"我愛",

out.putNextEntry( new ZipEntry("我愛"+base) );

結果為:

可以看到zip中的根目錄變成了“我愛電影”而不是原來的電影

?水平有限。。。請多多指教。。。。

來源:Java Zip壓縮實現 - 青兒哥哥 - 博客園

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Java Zip压缩实现(亲测)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。