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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

用java实现zip压缩

發布時間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用java实现zip压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本來是寫到spaces live上的,可是代碼的顯示效果確實不怎么好看。在javaeye上試了試代碼顯示的順眼多了。?

今天寫了個用java壓縮的功能,可以實現對文件和目錄的壓縮。?

由于java.util.zip.ZipOutputStream有中文亂碼問題,所以采用org.apache.tools.zip.ZipOutputStream。?
以下是代碼:?
Java代碼??
  • package?net.szh.zip;??
  • ??
  • import?java.io.BufferedInputStream;??
  • import?java.io.File;??
  • import?java.io.FileInputStream;??
  • import?java.io.FileOutputStream;??
  • import?java.util.zip.CRC32;??
  • import?java.util.zip.CheckedOutputStream;??
  • ??
  • import?org.apache.tools.zip.ZipEntry;??
  • import?org.apache.tools.zip.ZipOutputStream;??
  • ??
  • public?class?ZipCompressor?{??
  • ????static?final?int?BUFFER?=?8192;??
  • ??
  • ????private?File?zipFile;??
  • ??
  • ????public?ZipCompressor(String?pathName)?{??
  • ????????zipFile?=?new?File(pathName);??
  • ????}??
  • ??
  • ????public?void?compress(String?srcPathName)?{??
  • ????????File?file?=?new?File(srcPathName);??
  • ????????if?(!file.exists())??
  • ????????????throw?new?RuntimeException(srcPathName?+?"不存在!");??
  • ????????try?{??
  • ????????????FileOutputStream?fileOutputStream?=?new?FileOutputStream(zipFile);??
  • ????????????CheckedOutputStream?cos?=?new?CheckedOutputStream(fileOutputStream,??
  • ????????????????????new?CRC32());??
  • ????????????ZipOutputStream?out?=?new?ZipOutputStream(cos);??
  • ????????????String?basedir?=?"";??
  • ????????????compress(file,?out,?basedir);??
  • ????????????out.close();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????throw?new?RuntimeException(e);??
  • ????????}??
  • ????}??
  • ??
  • ????private?void?compress(File?file,?ZipOutputStream?out,?String?basedir)?{??
  • ????????/*?判斷是目錄還是文件?*/??
  • ????????if?(file.isDirectory())?{??
  • ????????????System.out.println("壓縮:"?+?basedir?+?file.getName());??
  • ????????????this.compressDirectory(file,?out,?basedir);??
  • ????????}?else?{??
  • ????????????System.out.println("壓縮:"?+?basedir?+?file.getName());??
  • ????????????this.compressFile(file,?out,?basedir);??
  • ????????}??
  • ????}??
  • ??
  • ????/**?壓縮一個目錄?*/??
  • ????private?void?compressDirectory(File?dir,?ZipOutputStream?out,?String?basedir)?{??
  • ????????if?(!dir.exists())??
  • ????????????return;??
  • ??
  • ????????File[]?files?=?dir.listFiles();??
  • ????????for?(int?i?=?0;?i?<?files.length;?i++)?{??
  • ????????????/*?遞歸?*/??
  • ????????????compress(files[i],?out,?basedir?+?dir.getName()?+?"/");??
  • ????????}??
  • ????}??
  • ??
  • ????/**?壓縮一個文件?*/??
  • ????private?void?compressFile(File?file,?ZipOutputStream?out,?String?basedir)?{??
  • ????????if?(!file.exists())?{??
  • ????????????return;??
  • ????????}??
  • ????????try?{??
  • ????????????BufferedInputStream?bis?=?new?BufferedInputStream(??
  • ????????????????????new?FileInputStream(file));??
  • ????????????ZipEntry?entry?=?new?ZipEntry(basedir?+?file.getName());??
  • ????????????out.putNextEntry(entry);??
  • ????????????int?count;??
  • ????????????byte?data[]?=?new?byte[BUFFER];??
  • ????????????while?((count?=?bis.read(data,?0,?BUFFER))?!=?-1)?{??
  • ????????????????out.write(data,?0,?count);??
  • ????????????}??
  • ????????????bis.close();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????throw?new?RuntimeException(e);??
  • ????????}??
  • ????}??
  • }??


  • 后來發現原來可以用ant中的org.apache.tools.ant.taskdefs.Zip來實現,更加簡單。?
    Java代碼??
  • package?net.szh.zip;??
  • ??
  • import?java.io.File;??
  • ??
  • import?org.apache.tools.ant.Project;??
  • import?org.apache.tools.ant.taskdefs.Zip;??
  • import?org.apache.tools.ant.types.FileSet;??
  • ??
  • public?class?ZipCompressorByAnt?{??
  • ??
  • ????private?File?zipFile;??
  • ??
  • ????public?ZipCompressorByAnt(String?pathName)?{??
  • ????????zipFile?=?new?File(pathName);??
  • ????}??
  • ??????
  • ????public?void?compress(String?srcPathName)?{??
  • ????????File?srcdir?=?new?File(srcPathName);??
  • ????????if?(!srcdir.exists())??
  • ????????????throw?new?RuntimeException(srcPathName?+?"不存在!");??
  • ??????????
  • ????????Project?prj?=?new?Project();??
  • ????????Zip?zip?=?new?Zip();??
  • ????????zip.setProject(prj);??
  • ????????zip.setDestFile(zipFile);??
  • ????????FileSet?fileSet?=?new?FileSet();??
  • ????????fileSet.setProject(prj);??
  • ????????fileSet.setDir(srcdir);??
  • ????????//fileSet.setIncludes("**/*.java");?包括哪些文件或文件夾?eg:zip.setIncludes("*.java");??
  • ????????//fileSet.setExcludes(...);?排除哪些文件或文件夾??
  • ????????zip.addFileset(fileSet);??
  • ??????????
  • ????????zip.execute();??
  • ????}??
  • }??

  • 測試一下?
    Java代碼??
  • package?net.szh.zip;??
  • ??
  • public?class?TestZip?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????ZipCompressor?zc?=?new??ZipCompressor("E:\\szhzip.zip");??
  • ????????zc.compress("E:\\test");??
  • ??????????
  • ????????ZipCompressorByAnt?zca?=?new?ZipCompressorByAnt("E:\\szhzipant.zip");??
  • ????????zca.compress("E:\\test");??
  • ????}??
  • }??
  • 轉載:http://szhnet.iteye.com/blog/199059

    轉載于:https://www.cnblogs.com/langtianya/p/4820093.html

    總結

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

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