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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java使用ZipOutputStream对文件进行压缩

發(fā)布時間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java使用ZipOutputStream对文件进行压缩 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • java處理文件壓縮的類
      • ZipOutStream壓縮文件
          • 1.putNextEntry(new ZipEntry(""))
          • 2.write()

java處理文件壓縮的類

java中常用ZipOutStream進行文件的壓縮,用ZipInputStream對文件進行解壓,zip相對于其他的文件的io稍有一點點不同的就是:它的內部就是一個小型的文件系統(tǒng)。如果是一個文件夾所有文件都是文檔二不是文件夾。那還好辦直接操作。如果涉及到文件夾和文檔的不固定分布。那就需要仔細考慮下。這里用遞歸進行遍歷。

ZipOutStream壓縮文件

主要兩個方法:

1.putNextEntry(new ZipEntry(""))

這里面重要的就是ZipEntry這個概念首先要懂。ZipEntry是zip下面的文件條目,你可以比作外面系統(tǒng)的File類似。后面的參數(shù)就是在zip目錄下的相對位置。所以這里有一點比較重要的就是當你遍歷文件夾的時候你的ZipEntry的參數(shù)的改變規(guī)律。寫不好的話會使整個文件目錄混亂(如果文件層級較低那就不礙事)。而putNextEntry(ZipEntry z)的意思就是我下面io操作(寫入)都是在z這個文件條目下進行的。

2.write()

這個zipoutputstream流和其他的output流不一樣的地方就是BufferedOutputStream不能嵌套它。也就是它不能套緩存流用。

對于文件夾下包含文件夾需要特殊考慮。判斷它是不是文件夾。文件夾的話要遍歷他的子節(jié)點文件。用遞歸思想。已在代碼中給出注釋。還有文件要注意相對絕對路徑。

貼上我的模板代碼:

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream;public class test1 {public static void main(String[] args) throws IOException {String filepath="F:\\fileget\\二班";//目標文件夾String zipname="F:\\fileget\\二班軟工作業(yè).zip";//目標輸出路徑filetozip(filepath,zipname);}public static void filetozip(String filepath,String zipname) throws IOException {File file=new File(filepath);OutputStream outputStream=new FileOutputStream(zipname);ZipOutputStream zipout=new ZipOutputStream(outputStream); //遞歸函數(shù) 三個參數(shù)分別代表 1:當前zipout流 2:當前文件/文件夾 3:在zip下的pathdozip(zipout,file,""); zipout.finish();zipout.close();outputStream.close();}private static void dozip(ZipOutputStream zipout, File file, String addpath) throws IOException {if(file.isDirectory()){File f[]=file.listFiles();for(int i=0;i<f.length;i++){if(f[i].isDirectory()) {dozip(zipout, f[i], addpath+f[i].getName()+"/");}else {dozip(zipout, f[i], addpath+f[i].getName());}}}else{InputStream input;BufferedInputStream buff;zipout.putNextEntry(new ZipEntry(addpath));input=new FileInputStream(file);buff=new BufferedInputStream(input);byte b[]=new byte[1024*5];int a=0;while((a=buff.read(b))!=-1){zipout.write(b);}buff.close();input.close();System.out.println(file.getName());}}}



另外,解壓的那個類后面有時間會補充下來。

  • 如果對后端、爬蟲、數(shù)據(jù)結構算法等感性趣歡迎關注我的個人公眾號交流:bigsai
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的java使用ZipOutputStream对文件进行压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

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