JAVA实现实用的ZIP压缩与解压

序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

  1. packagecom.han;
  2. importjava.io.*;
  3. importjava.util.zip.*;
  4. /**
  5. *程序实现了ZIP压缩。共分为2部分:
  6. *压缩(compression)与解压(decompression)
  7. *<p>
  8. *大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
  9. *需在代码中自定义源输入路径和目标输出路径。
  10. *<p>
  11. *在本段代码中,实现的是压缩部分;解压部分见本包中decompression部分。
  12. *@authorHAN
  13. *
  14. */
  15. publicclassCopyOfMyZipCompressing{
  16. privateintk=1;//定义递归次数变量
  17. publicCopyOfMyZipCompressing(){
  18. //TODOAuto-generatedconstructorstub
  19. }
  20. publicstaticvoidmain(String[]args){
  21. //TODOAuto-generatedmethodstub
  22. longstartTime=System.currentTimeMillis();
  23. CopyOfMyZipCompressingbook=newCopyOfMyZipCompressing();
  24. try{
  25. book.zip("C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip",//自定义的zip输出路径
  26. newFile("C:\\Users\\HAN\\Desktop\\CombinedSpectres.txt"));//自定义的源输入路径,即要压缩的文件或文件夹
  27. }catch(Exceptione){
  28. //TODOAuto-generatedcatchblock
  29. e.printStackTrace();
  30. }
  31. longendTime=System.currentTimeMillis();
  32. System.out.println("耗费时间:"+(endTime-startTime)+"ms");
  33. }
  34. privatevoidzip(StringzipFileName,FileinputFile)throwsException{
  35. System.out.println("压缩中...");
  36. ZipOutputStreamout=newZipOutputStream(newFileOutputStream(zipFileName));
  37. BufferedOutputStreambo=newBufferedOutputStream(out);
  38. zip(out,inputFile,"/"+inputFile.getName(),bo);
  39. bo.close();
  40. out.close();//输出流关闭
  41. System.out.println("压缩完成");
  42. }
  43. privatevoidzip(ZipOutputStreamout,Filef,Stringbase,BufferedOutputStreambo)
  44. throwsException{//方法重载
  45. if(f.isDirectory()){
  46. File[]fl=f.listFiles();
  47. for(inti=0;i<fl.length;i++){
  48. zip(out,fl[i],base+"/"+fl[i].getName(),bo);//递归遍历子文件夹
  49. }
  50. System.out.println("第"+k+"次递归");
  51. k++;
  52. }else{
  53. out.putNextEntry(newZipEntry(base));//创建zip压缩进入点base
  54. System.out.println(base);
  55. FileInputStreamin=newFileInputStream(f);
  56. BufferedInputStreambi=newBufferedInputStream(in);
  57. intb;
  58. while((b=bi.read())!=-1){
  59. bo.write(b);//将字节流写入当前zip目录
  60. }
  61. bi.close();
  62. in.close();//输入流关闭
  63. }
  64. }
  65. }

  1. packagecom.han;
  2. importjava.io.*;
  3. importjava.util.zip.*;
  4. /**
  5. *程序实现了ZIP压缩。共分为2部分:
  6. *压缩(compression)与解压(decompression)
  7. *<p>
  8. *大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
  9. *需在代码中自定义源输入路径和目标输出路径。
  10. *<p>
  11. *在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。
  12. *@authorHAN
  13. *
  14. */
  15. publicclassCopyOfMyzipDecompressing{
  16. publicstaticvoidmain(String[]args){
  17. //TODOAuto-generatedmethodstub
  18. longstartTime=System.currentTimeMillis();
  19. try{
  20. ZipInputStreamZin=newZipInputStream(newFileInputStream(
  21. "C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip"));//输入源zip路径
  22. BufferedInputStreamBin=newBufferedInputStream(Zin);
  23. StringParent="C:\\Users\\HAN\\Desktop";//输出路径(文件夹目录)
  24. FileFout=null;
  25. ZipEntryentry;
  26. try{
  27. while((entry=Zin.getNextEntry())!=null&&!entry.isDirectory()){
  28. Fout=newFile(Parent,entry.getName());
  29. if(!Fout.exists()){
  30. (newFile(Fout.getParent())).mkdirs();
  31. }
  32. FileOutputStreamout=newFileOutputStream(Fout);
  33. BufferedOutputStreamBout=newBufferedOutputStream(out);
  34. intb;
  35. while((b=Bin.read())!=-1){
  36. Bout.write(b);
  37. }
  38. Bout.close();
  39. out.close();
  40. System.out.println(Fout+"解压成功");
  41. }
  42. Bin.close();
  43. Zin.close();
  44. }catch(IOExceptione){
  45. //TODOAuto-generatedcatchblock
  46. e.printStackTrace();
  47. }
  48. }catch(FileNotFoundExceptione){
  49. //TODOAuto-generatedcatchblock
  50. e.printStackTrace();
  51. }
  52. longendTime=System.currentTimeMillis();
  53. System.out.println("耗费时间:"+(endTime-startTime)+"ms");
  54. }
  55. }

原文地址:http://blog.csdn.net/gaowen_han/article/details/7163737

你可能感兴趣的:(java实现)