用java实现zip压缩
生活随笔
收集整理的這篇文章主要介紹了
用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
今天寫了個用java壓縮的功能,可以實現對文件和目錄的壓縮。?
由于java.util.zip.ZipOutputStream有中文亂碼問題,所以采用org.apache.tools.zip.ZipOutputStream。?
以下是代碼:?
Java代碼??
后來發現原來可以用ant中的org.apache.tools.ant.taskdefs.Zip來實現,更加簡單。?
Java代碼??
測試一下?
Java代碼??
轉載于:https://www.cnblogs.com/langtianya/p/4820093.html
總結
以上是生活随笔為你收集整理的用java实现zip压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冒泡排序,swich语句,while循环
- 下一篇: 【SSH】——Struts2中的动态方法